例如:
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.
当前回答
我有ArrayList<Map<String,对象>> items = (ArrayList<Map<String,对象>>)值;因为value是一个复杂的结构(我想要清除JSON),可以在数字、布尔值、字符串、数组上发生任何组合。所以,我使用了@Dan Dyer的解决方案:
@SuppressWarnings("unchecked")
ArrayList<Map<String, Object>> items = (ArrayList<Map<String, Object>>) value;
其他回答
解决方案是在<>中使用特定的类型,如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>();
我只是想再举一个我经常看到的未检查警告的例子。如果使用实现Serializable等接口的类,通常会调用返回接口对象的方法,而不是实际的类。如果返回的类必须转换为基于泛型的类型,则可以得到此警告。
下面是一个简单(有点傻)的例子:
import java.io.Serializable;
public class SimpleGenericClass<T> implements Serializable {
public Serializable getInstance() {
return this;
}
// @SuppressWarnings("unchecked")
public static void main() {
SimpleGenericClass<String> original = new SimpleGenericClass<String>();
// java: unchecked cast
// required: SimpleGenericClass<java.lang.String>
// found: java.io.Serializable
SimpleGenericClass<String> returned =
(SimpleGenericClass<String>) original.getInstance();
}
}
getInstance()返回一个实现Serializable的对象。必须将此类型转换为实际类型,但这是未检查的类型转换。
我上了两年前的课,也上了一些新课。我在Android Studio中解决了这个问题:
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked"
}
}
}
在我的项目构建中。gradle文件(Borzh解决方案)
如果还剩下一些methods:
@SuppressWarnings("unchecked")
public void myMethod()
{
//...
}
例如,当你调用一个返回泛型集合的函数时,你不自己指定泛型参数。
对于一个函数
List<String> getNames()
List names = obj.getNames();
将生成此错误。
要解它,你只需要加上参数
List<String> names = obj.getNames();