删除有关未选中操作的编译时警告

时间:2011-02-08 00:04:45

标签: java compiler-warnings

以下行会导致编译时警告:

ArrayList<Integer> a = (ArrayList) b.clone();

创建:

Note: MyClass.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

如何删除编译时警告? -Xlint:none和-nowarn似乎没有帮助。

编辑:我并不太关心类型安全;在代码的上下文中,我确信类型将起作用。我只想抑制编译器警告。

3 个答案:

答案 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}}进行编译,如错误消息所示。