克隆向量时无法发出Java警告

时间:2010-09-15 00:21:56

标签: java vector clone

我有两个向量声明为私有类属性:

private Vector<Myobject> v1 = new Vector<Myobject>();
private Vector<Myobject> v2 = new Vector<Myobject>();

我用一堆Myobjects填充v1。

我需要做一个v1到v2的浅层克隆。我试过了:

v2 = v1.clone();

我得到“未经检查或不安全的操作”。

我尝试过各种形式的施法,似乎无法克服这种警告。

即使我删除第二个(v2)声明并尝试克隆:

Vector<Myobject> v2 = v1.clone();

Vector<Myobject> v2 = ( Vector<Myobject> ) v1.clone();

......还是明白了。

我确定我在这里遗漏了一些非常基本的东西......

提前致谢

3 个答案:

答案 0 :(得分:5)

在将非参数化类型(例如Object返回的clone())转换为参数化类型时,编译器将始终发出警告。这是因为目标类型Vector<Myobject>不仅要保证自身,还要保证其中包含的对象。但是,由于类型参数信息已被删除,因此无法在运行时验证这些保证。

See here for a a more detailed explanation.

如前所述,如果您只是想复制矢量v1,那么正确的方法就是使用复制构造函数。

Vector<Myobject> v2 = new Vector<Myobject>(v1);

生成的克隆将很浅,因为它只会将Myobject引用从v1复制到v2。

答案 1 :(得分:3)

请尝试使用复制构造函数:

Vector<Myobject> v2 = new Vector<Myobject>(v1);

答案 2 :(得分:2)

有时,作为程序员,您知道警告不是问题,但是没有办法仅通过修改代码来说服编译器。这就是为什么它是警告而不是错误。

在这些情况下,您可以在作业上方添加SuppressWarnings注释:

@SuppressWarnings("unchecked")
Vector<Myobject> v2 = (Vector<Myobject>) v1.clone();