例如:

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

当前回答

这个警告也可能会被引发,因为新的HashMap()或新的ArrayList()是泛型类型,必须是特定的,否则编译器将生成警告。

请确保如果您的代码包含以下内容,您必须相应更改

new HashMap() => Map<String,Object> map = new HashMap<String,Object>()
new HashMap() => Map<String,Object> map = new HashMap<>()

new ArrayList() => List<String,Object> map = new ArrayList<String,Object>()
new ArrayList() => List<String,Object> map = new ArrayList<>()

其他回答

“未检查或不安全操作”警告是在java添加泛型时添加的,如果我没记错的话。它通常要求你以这样或那样的方式更明确地说明类型。

为例。foo = new ArrayList();触发该警告,因为javac正在寻找ArrayList<String> foo = new ArrayList<String>();

如果你按照它所建议的去做,并使用“-Xlint:unchecked”开关重新编译,它将为你提供更详细的信息。

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

一旦你用-Xlint进行了编译,你应该能够重做你的代码来避免这个警告。这并不总是可行的,特别是当您正在集成无法更改的遗留代码时。在这种情况下,你可以决定在你知道代码是正确的地方取消警告:

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

你可以保持它的一般形式,并将其写成:

// list 2 is made generic and can store any type of Object
ArrayList<Object> list2 = new ArrayList<Object>();

将数组列表的类型设置为对象使我们能够存储任何类型的数据。你不需要使用-Xlint或其他任何东西。

我只是想再举一个我经常看到的未检查警告的例子。如果使用实现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的对象。必须将此类型转换为实际类型,但这是未检查的类型转换。

这个警告也可能会被引发,因为新的HashMap()或新的ArrayList()是泛型类型,必须是特定的,否则编译器将生成警告。

请确保如果您的代码包含以下内容,您必须相应更改

new HashMap() => Map<String,Object> map = new HashMap<String,Object>()
new HashMap() => Map<String,Object> map = new HashMap<>()

new ArrayList() => List<String,Object> map = new ArrayList<String,Object>()
new ArrayList() => List<String,Object> map = new ArrayList<>()