Android Studio显示以下代码的未经检查的警告调用

ERN*_*ERN 5 java android-studio

这有什么问题?看到代码和警告信息,任何人都可以详细说明.

public void chooseBreakfast() {

            ArrayAdapter planAdapter1 = new ArrayAdapter(this,
            android.R.layout.simple_spinner_item, new Food[]{
            new Food(1, "Toast"),
            new Food(99, "Cereal"),
            new Food(53, "Fruit"),
            new Food(153, "Yogurt")
     });
Run Code Online (Sandbox Code Playgroud)

警告消息 - 未经检查的调用'ArrayAdapter(Context,int,T [])'作为原始类型'android.widget.ArrayAdapter'的成员少...(Ctrl + F1)

JDK 5.0 only. Signals places where an unchecked warning is issued by the compiler, for example:

void f(HashMap map) {
      map.put("key", "value");
}
Run Code Online (Sandbox Code Playgroud)

Rav*_*yal 8

编译器会警告您有关raw 的用法ArrayAdapter.您应该使用一个通用 ArrayAdapter

ArrayAdapter<Food> planAdapter1 = new ArrayAdapter<Food>(this,
        android.R.layout.simple_spinner_item, new Food[]{
        new Food(1, "Toast"),
        new Food(99, "Cereal"),
        new Food(53, "Fruit"),
        new Food(153, "Yogurt")
});
Run Code Online (Sandbox Code Playgroud)

请注意,如何ArrayAdapter定义类及其构造函数.

public class ArrayAdapter<T> extends BaseAdapter ... { // T = generic type

    public ArrayAdapter(Context context, int resource, T[] objects) {
        init(context, resource, 0, Arrays.asList(objects));
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

它们使用T简单ArrayAdapter()初始化忽略传递的泛型类型参数.因此,警告.传递类型的好处T是你摆脱了不必要的强制转换,你的代码变得更加类型安全.

对于例如,调用ArrayAdapter#getItem()一个对原料适配器将返回Object,并要求你扔在Food你自己.该generic适配器将返回的实际类型Food自动.