以下行会导致编译时警告:
ArrayList<Integer> a = (ArrayList) b.clone();
创建:
Note: MyClass.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
如何删除编译时警告? -Xlint:none和-nowarn似乎没有帮助。
编辑:我并不太关心类型安全;在代码的上下文中,我确信类型将起作用。我只想抑制编译器警告。
答案 0 :(得分:9)
您可以在此变量声明之前使用@SuppressWarnings("unchecked")
,这有助于消除警告。
不幸的是,实际上没有办法以类型安全的方式进行克隆,你必须信任clone方法才真正只返回新ArrayList中的整数。
如果您一般不想要此类编译器警告,则可以添加-Xlint:-unchecked
以关闭有关未经检查的常规转换的所有警告。然而,仿制药的类型安全性已经不复存在了。
答案 1 :(得分:5)
使用:
List<Integer> a = new ArrayList<Integer>(b);
答案 2 :(得分:2)
这是因为您正在将非通用ArrayList
转换为通用ArrayList
。您必须将其强制转换为通用ArrayList<Integer> a = (ArrayList<Integer>)b.clone();
:
-Xlint:unchecked
此外,将来尝试使用{{1}}进行编译,如错误消息所示。