【问题标题】:Android Studio displaying a warning unchecked call for the following codeAndroid Studio 显示以下代码的警告未经检查的调用
【发布时间】:2015-03-15 11:32:20
【问题描述】:

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

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")
     });

警告消息 - 未经检查地调用 '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");
}

【问题讨论】:

标签: java android-studio


【解决方案1】:

编译器警告您使用 raw ArrayAdapter。你应该使用 generic ArrayAdapter as

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")
});

注意,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));
    }
    ...
}

他们使用一个泛型类型参数T,简单的ArrayAdapter() 初始化忽略传递。因此,警告。传递 T 类型的好处是您可以摆脱不必要的强制转换,并且您的代码变得更加安全。

例如,在 raw 适配器上调用 ArrayAdapter#getItem() 将返回 Object 并要求您自己将其转换为 Foodgeneric 适配器将自动返回实际类型 Food

【讨论】:

  • 不知道它是否相关,但现在我已经改变了它并开始模拟运行,我看到了 LogCat 错误。 02-16 13:45:55.230 837-837/com.example.student.neillapp E/AndroidRuntime:致命异常:主要 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.student.neillapp/com.example .student.neillapp.AddActivity}:java.lang.NullPointerException
  • 这可能是您当前代码与原始适配器交互方式的副作用,但肯定与原始问题无关:编译器警告。因此,请特别围绕异常中提到的行发布一个包含完整堆栈跟踪和 AddActivity 代码的新问题。在 cmets 这里贴一个链接,我也可以看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
相关资源
最近更新 更多