我的,也许是天真的克隆ArrayList(Vector替换)的解决方案是
ArrayList<Double> alBis = (ArrayList<Double>) alOriginal.clone();
考虑到因为数组包含不可变的双打,我不需要 克隆它们,但只能克隆容器。
当clone()返回一个Object时,我把它放在那里,但随后 -Xlint抱怨说这是一个未经检查的演员。
那么,现在呢?用supressWarnings忽略它?创建一个新的ArrayList 用复制品复制原始元素?任何类似的库方法 Arrays.copyOf()?
我读过Unchecked cast warning,但接受的方式令人难以置信。
答案 0 :(得分:13)
clone()
存在重大缺陷,请参阅this Question以供参考。不要用它!
相反,所有标准集合都有复制构造函数。使用它们:
List<Double> original = // some list
List<Double> copy = new ArrayList<Double>(original);
<强>参考:强>
答案 1 :(得分:4)
使用.clone()?
是不对的
应尽可能避免。它是一个过时的,设计糟糕的fundamentally broken API。最好像@Sean建议的那样使用复制构造函数。
答案 2 :(得分:1)
我个人会推荐Google guava-libraries,并且:
ImmutableCollection<Double> copy = ImmutableList.copyOf(original);
并且不要使用JRE克隆,因为它很糟糕(如果你想知道原因,那么阅读引用)。
<强>参考:强>