导致 javac 发出“使用未经检查或不安全的操作”警告的原因

2022-08-31 04:57:09

例如:

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

答案 1

这在 Java 5 及更高版本中出现,如果您使用的是没有类型说明符的集合(例如,而不是 )。这意味着编译器无法检查你是否正在以类型安全的方式使用泛型来使用集合。Arraylist()ArrayList<String>()

若要删除警告,需要明确说明集合中存储的对象类型。所以,而不是

List myList = new ArrayList();

List<String> myList = new ArrayList<String>();

在 Java 7 中,您可以使用类型推断来缩短泛型实例化。

List<String> myList = new ArrayList<>();

答案 2

如果您按照它的建议执行并重新编译“-Xlint:unchecked”开关,它将为您提供更详细的信息。

除了使用原始类型(如其他答案所述)外,未经检查的强制转换也可能导致警告。

使用 -Xlint 进行编译后,您应该能够返工代码以避免出现警告。这并不总是可能的,特别是如果您要与无法更改的旧代码集成。在此情况下,您可能会决定在知道代码正确的地方禁止显示警告:

@SuppressWarnings("unchecked")
public void myMethod()
{
    //...
}

推荐