Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除有关未检查操作的编译时警告_Java_Compiler Warnings - Fatal编程技术网

Java 删除有关未检查操作的编译时警告

Java 删除有关未检查操作的编译时警告,java,compiler-warnings,Java,Compiler Warnings,以下行导致编译时警告: ArrayList<Integer> a = (ArrayList) b.clone(); 如何删除编译时警告-Xlint:none和-nowarn似乎没有帮助 编辑:我真的不太在乎类型安全;在代码的上下文中,我确信这些类型可以工作。我只想抑制编译器警告。这是因为您正在将泛型ArrayList强制转换为非泛型。您必须将其强制转换为通用的ArrayList: ArrayList<Integer> a = (ArrayList<Integer&

以下行导致编译时警告:

ArrayList<Integer> a = (ArrayList) b.clone();
如何删除编译时警告-Xlint:none和-nowarn似乎没有帮助


编辑:我真的不太在乎类型安全;在代码的上下文中,我确信这些类型可以工作。我只想抑制编译器警告。

这是因为您正在将泛型
ArrayList
强制转换为非泛型。您必须将其强制转换为通用的
ArrayList

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

此外,将来,请尝试使用
-Xlint:unchecked
进行编译,如错误消息所示。

您可以在此变量声明之前使用
@SuppressWarnings(“unchecked”)
,这将有助于消除警告

不幸的是,实际上没有一种方法可以以类型安全的方式进行克隆,您必须信任克隆方法在新的ArrayList中只返回整数


如果您一般不希望出现此类编译器警告,可以添加
-Xlint:-unchecked
,以关闭有关未经检查的泛型转换的所有警告。但是,泛型的类型安全性已经消失了。

使用:

List<Integer> a = new ArrayList<Integer>(b);
List a=新的数组列表(b);

是的,我尝试了-Xlint:未选中,但我不知道如何修复它。谢谢事实上,问题不在于将泛型ArrayList强制转换为非泛型ArrayList,而在于将(强制转换的)非泛型ArrayList指定给泛型变量。这仍然是usafe强制转换,不是吗?(我现在无法再次检查)。@Puce:是的,添加
只会将一个警告(从原始类型转换为泛型类型)更改为另一个警告(未选中强制转换)。+1表示注释建议。最好在提示您已意识到潜在问题的点上抑制警告。
-Xlint:-未选中
不会使其完全消失,它仍会打印注释。事实上,这与不指定
-Xlint:unchecked
没有什么不同,因为unchecked是“为Java语言规范强制要求的未经检查的转换警告提供更多细节”。我认为注释是使其不显示任何内容的唯一方法。如果您只需要,这实际上是一种更好的方法“一个包含相同元素的新列表”(并且您没有ArrayList的任何子类,这样会被忽略)。
List<Integer> a = new ArrayList<Integer>(b);