例如:
javac Foo.java
Note: Foo.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
例如:
javac Foo.java
Note: Foo.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
当前回答
此警告意味着您的代码在原始类型上操作,请使用
-Xlint:unchecked
获取详细信息
是这样的:
javac YourFile.java -Xlint:unchecked
Main.java:7: warning: [unchecked] unchecked cast
clone.mylist = (ArrayList<String>)this.mylist.clone();
^
required: ArrayList<String>
found: Object
1 warning
Docs.oracle.com在这里谈到了它: http://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html
其他回答
如果你在使用没有类型说明符的集合(例如,Arraylist()而不是Arraylist <String>()),这将在Java 5或更高版本中出现。这意味着编译器不能检查您是否使用泛型以类型安全的方式使用集合。
要消除警告,需要明确在集合中存储的对象类型。所以,与其
List myList = new ArrayList();
use
List<String> myList = new ArrayList<String>();
在Java 7中,你可以通过使用类型推断来缩短泛型实例化。
List<String> myList = new ArrayList<>();
你可以保持它的一般形式,并将其写成:
// list 2 is made generic and can store any type of Object
ArrayList<Object> list2 = new ArrayList<Object>();
将数组列表的类型设置为对象使我们能够存储任何类型的数据。你不需要使用-Xlint或其他任何东西。
例如,当你调用一个返回泛型集合的函数时,你不自己指定泛型参数。
对于一个函数
List<String> getNames()
List names = obj.getNames();
将生成此错误。
要解它,你只需要加上参数
List<String> names = obj.getNames();
解决方案是在<>中使用特定的类型,如ArrayList<File>。
例子:
File curfolder = new File( "C:\\Users\\username\\Desktop");
File[] file = curfolder.listFiles();
ArrayList filename = Arrays.asList(file);
以上代码生成警告,因为ArrayList不是特定类型。
File curfolder = new File( "C:\\Users\\username\\Desktop");
File[] file = curfolder.listFiles();
ArrayList<File> filename = Arrays.asList(file);
上面的代码就可以了。唯一的变化是在ArrayList之后的第三行。
“未检查或不安全操作”警告是在java添加泛型时添加的,如果我没记错的话。它通常要求你以这样或那样的方式更明确地说明类型。
为例。foo = new ArrayList();触发该警告,因为javac正在寻找ArrayList<String> foo = new ArrayList<String>();