我有两个向量声明为私有类属性:
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)
......还是明白了
我确定我在这里遗漏了一些非常基本的东西......
提前致谢
在将非参数化类型(例如Object返回的clone())转换为参数化类型时,编译器将始终发出警告.这是因为目标类型Vector<Myobject>不仅要保证自身,还要保证其中包含的对象.但是,由于类型参数信息已被删除,因此无法在运行时验证这些保证.
如前所述,如果您只是想制作矢量v1的副本,那么正确的方法是使用复制构造函数.
Vector<Myobject> v2 = new Vector<Myobject>(v1);
Run Code Online (Sandbox Code Playgroud)
生成的克隆将很浅,因为这只会将Myobject引用从v1 复制到v2.