Java 不安全或未经检查的表达式:克隆数组列表

Jie*_*eng 1 java compiler-errors type-safety

我在编译时遇到未经检查的表达式错误,发现有问题的行是

ArrayList<Integer> items = (ArrayList<Integer>) this.items.clone();
Run Code Online (Sandbox Code Playgroud)

我正在尝试执行对象的深层复制,因此我以上述方式克隆对象和数组列表的属性。我该如何解决这个警告?

  • 我可以使用@SuppressWarnings("unchecked"),但这只是隐藏了问题(尽管我期望没有)
  • 如果我通过循环遍历所有元素来手动克隆,我认为它会更慢

这样做的正确方法是什么?

Lou*_*man 5

如果您的元素是整数,则执行“深层复制”实际上不是问题,因为没有理由需要复制整数对象。只需使用new ArrayList<Integer>(this.items).

但作为参考,clone() 和 ArrayList 复制构造函数都不会执行深层复制。只是因为您的元素类型不需要深度复制,这才满足您的需求。