例如:
javac Foo.java Note: Foo.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.
Bill the Liz.. 372
如果您使用的是没有类型说明符的集合(例如,Arraylist()
而不是ArrayList
),则会出现在Java 5及更高版本中.这意味着编译器无法使用泛型来检查您是否以类型安全的方式使用集合.
要消除警告,只需具体说明您在集合中存储的对象类型.所以,而不是
List myList = new ArrayList();
使用
ListmyList = new ArrayList ();
在Java 7中,您可以使用类型推断缩短通用实例化.
ListmyList = new ArrayList<>();
@Lucio你还需要尖括号.`new ConcurrentHashMap <>()` (13认同)
需要指出的是,这不是特定于集合的.您收到错误,因为Java编译器通常无法确保类型安全.例如,使用以下代码生成相同的警告:AbstractMap.SimpleEntry
Dan Dyer.. 186
如果您执行它建议的内容并使用"-Xlint:unchecked"开关重新编译,它将为您提供更详细的信息.
除了原始类型的使用(如其他答案所述),未经检查的强制转换也可能导致警告.
使用-Xlint编译后,您应该能够重新编写代码以避免出现警告.这并不总是可行的,特别是如果要与无法更改的遗留代码集成.在这种情况下,您可能决定在知道代码正确的位置禁止警告:
@SuppressWarnings("unchecked") public void myMethod() { //... }
我希望更多的人能够回答这个问题.我支持我选择@Bill the Lizard的答案,但这个答案非常接近我的心,因为我告诉我答案是在警告本身正面看着我,并详细阐述了遇到错误的另一个原因. (12认同)
Suganthan Ma.. 15
此警告意味着您的代码在原始类型上运行,使用.重新编译示例
-Xlint:unchecked
得到细节
像这样:
javac YourFile.java -Xlint:unchecked Main.java:7: warning: [unchecked] unchecked cast clone.mylist = (ArrayList)this.mylist.clone(); ^ required: ArrayList found: Object 1 warning
docs.oracle.com在这里讨论它:http://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html
如果您使用的是没有类型说明符的集合(例如,Arraylist()
而不是ArrayList
),则会出现在Java 5及更高版本中.这意味着编译器无法使用泛型来检查您是否以类型安全的方式使用集合.
要消除警告,只需具体说明您在集合中存储的对象类型.所以,而不是
List myList = new ArrayList();
使用
ListmyList = new ArrayList ();
在Java 7中,您可以使用类型推断缩短通用实例化.
ListmyList = new ArrayList<>();
如果您执行它建议的内容并使用"-Xlint:unchecked"开关重新编译,它将为您提供更详细的信息.
除了原始类型的使用(如其他答案所述),未经检查的强制转换也可能导致警告.
使用-Xlint编译后,您应该能够重新编写代码以避免出现警告.这并不总是可行的,特别是如果要与无法更改的遗留代码集成.在这种情况下,您可能决定在知道代码正确的位置禁止警告:
@SuppressWarnings("unchecked") public void myMethod() { //... }
此警告意味着您的代码在原始类型上运行,使用.重新编译示例
-Xlint:unchecked
得到细节
像这样:
javac YourFile.java -Xlint:unchecked Main.java:7: warning: [unchecked] unchecked cast clone.mylist = (ArrayList)this.mylist.clone(); ^ required: ArrayList found: Object 1 warning
docs.oracle.com在这里讨论它:http://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html
对于Android Studio,您需要添加:
allprojects { gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint:unchecked" } } // ... }
在项目的build.gradle文件中,以了解在何处产生此错误。
例如,当您调用返回通用集合的函数并且您自己未指定通用参数时.
一个功能
ListgetNames() List names = obj.getNames();
将生成此错误.
要解决它,您只需添加参数
Listnames = obj.getNames();
如果我没记错的话,当java添加Generics时会添加"未经检查或不安全的操作"警告.通常会要求您以某种方式更明确地表达类型.
例如.代码ArrayList foo = new ArrayList();
触发了警告,因为javac正在寻找ArrayList