Основная причина: Вы используете 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
и т. д. *