«Не проверенный вызов» в ArrayList - PullRequest
0 голосов
/ 26 августа 2018

Я не понимаю, почему у меня возникают эти ошибки и как их решать, в следующем коде в моем файле MainActivity.Я искал в Google, но не могу связать решения с моим кодом.Я также передал -Xlint: снят с javac, но не могу получить мудрее.

Я довольно новичок в программировании на Android и Java и пытаюсь решить любые проблемы в моем коде.

Заранее спасибо.

Непроверенное назначение: 'java.util.ArrayList 'to' java.util.ArrayList 'less ... (Ctrl + F1) Указывает места, где компилятор выдает непроверенное предупреждение, например:

void f (карта HashMap) {map.put («ключ», «значение»);} Подсказка: Передайте -Xlint: снят с javac для получения более подробной информации.


Непроверенный вызов ArrayList (Collection) как члена типа raw java.util.ArrayList 'less ... (Ctrl + F1) Сигнализирует места, где компилятор выдает непроверенное предупреждение, например:

void f (HashMap map) {map.put ("key", "value");} Подсказка: Pass -Xlint: снят с 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 голосов
/ 27 августа 2018

Основная причина: Вы используете 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 классы дженериков, такие как List, ArrayList, Map, HashMap, Set, HashSet и т. д. *

0 голосов
/ 27 августа 2018

Проблема возникает из-за неправильного использования generic .обычно вы должны использовать дженерики вместе с ArrayList, чтобы указать тип объектов, которые вы собираетесь хранить в вашем ArrayList.

Примерно так:

ArrayList<String> list = new ArrayList<>();

пожалуйста, проверьте определение items вваши коды.

...