ArrayList上的“未选中的呼叫”

时间:2018-08-26 20:43:30

标签: java android unchecked

在我的MainActivity文件中的以下代码上,我不明白为什么会出现此错误以及如何解决这些错误。我已经在Google上进行搜索,但是无法将解决方案与我的代码相关联。我也将-Xlint:unchecked传递给javac,但是也无法获得任何更明智的选择。

我刚接触Android和Java编程,并试图解决我的代码中的所有亮点。

谢谢。

  

未经检查的分配:“ java.util.ArrayList”   'java.util.ArrayList'更少...(Ctrl + F1)信号   编译器发出未经检查的警告的位置,用于   例如:

     

void f(HashMap地图){       map.put(“ key”,“ value”); }提示:将-Xlint:unchecked传递给javac以获得更多详细信息。


  

以未选中的身份调用“ ArrayList(Collection)”   原始类型'java.util.ArrayList'少...(Ctrl + F1)表示位置   编译器发出未经检查的警告,例如:

     

void f(HashMap地图){       map.put(“ key”,“ value”); }提示:将-Xlint:unchecked传递给javac以获得更多详细信息。


private void readItems() {
    File filesDir = getFilesDir();
    File todoFile = new File(filesDir, "todo.txt");
    try {
        items = new ArrayList<>(FileUtils.readLines(todoFile));
    } catch (IOException e) {
        items = new ArrayList<>();
    }
}

2 个答案:

答案 0 :(得分:1)

出现此问题是因为错误地使用了 generic 。您通常应该将泛型与ArrayList一起使用,以指定要存储在ArrayList中的对象的类型。

赞:

$("#datepick").datepicker();

$("#datepick").datepicker("setDate", curdate);

请检查代码中ArrayList<String> list = new ArrayList<>(); 的定义。

答案 1 :(得分:0)

根本原因::您正在将ArrayList用作Java中的泛型类型,但没有为其指定特定的类型。那就是为什么编译器显示该警告。

那么当您没有为泛型指定特定类型时会发生什么。这是一个场景。

 // You want this line contains only Integer.
List list = new ArrayList<>();

// 1. Warning when add new item.
list.add(1);
list.add(2);
list.add(3);

// 2. Must cast to Integer when using.
Integer number2 = (Integer) list.get(1);

// 3. Do not prevent developers from adding non-integer type, such as String, double, boolean etc.
list.add("Four");
list.add(true);

// 4. Might throws ClassCastException and make your app crashes.
Integer number = (Integer) list.get(4);

解决方案:在尖括号<>内为通用类型指定或传递特定类型。

 // You want this line contains only Integer.
List<Integer> list = new ArrayList<>();

// If you want to declare variable first
List<Integer> items;

// Then initialize
items = new ArrayList<>();

// 1. No warning when add new item.
items.add(1);
list.add(2);
list.add(3);

// 2. No need to cast to Integer.
Integer number2 = list.get(1);

// 3. Prevent developers from adding non-integer type, such as String, double, boolean etc.
list.add("Four"); // Error when compile
list.add(true); // Error when compile

// 4. You cannot add non-integer type and no need to cast so ClassCastException never occurs.
Integer number = list.get(2);

Java中内置了许多泛型类,例如ListArrayListMapHashMapSetHashSet等...