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

Rob*_*bNY 3 java clone vector

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

private Vector<Myobject> v1 = new Vector<Myobject>();
private Vector<Myobject> v2 = new Vector<Myobject>();
Run Code Online (Sandbox Code Playgroud)

我用一堆Myobjects填充v1.

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

v2 = v1.clone();
Run Code Online (Sandbox Code Playgroud)

我得到"未经检查或不安全的操作".

我尝试过各种形式的铸造,似乎无法克服这种警告.

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

Vector<Myobject> v2 = v1.clone();
Run Code Online (Sandbox Code Playgroud)

要么

Vector<Myobject> v2 = ( Vector<Myobject> ) v1.clone();
Run Code Online (Sandbox Code Playgroud)

......还是明白了

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

提前致谢

oks*_*ayt 5

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

请参阅此处以获取更详细的说明.

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

Vector<Myobject> v2 = new Vector<Myobject>(v1);
Run Code Online (Sandbox Code Playgroud)

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