Які відмінності між List
, List<?>
, List<T>
, List<E>
, і List<Object>
?
1. Список
List
: є сировинним типом, тому ні typesafe
. Це призведе до помилки виконання лише тоді, коли кастинг поганий. Ми хочемо, щоб помилка часу компіляції, коли акторський склад поганий. Не рекомендується використовувати.
2. Список <?>
List<?>
є необмеженою підстановою. Але я не впевнений, для чого це? Я можу надрукувати List<?>
без випуску:
public static void test(List<?> list){
System.out.println(list); // Works
}
Чому я не можу додати елементи до List<?>
?
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
3. Список <T>
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
Я не розумію цього синтаксису. Я бачив щось подібне, і це працює:
public <T> T[] toArray(T[] a){
return a;
}
Іноді я бачу <T>
, або <E>
, або <U>
, <T,E>
. Чи всі вони однакові чи вони представляють щось інше?
4. Список <Object>
Це дає помилку "Метод test(List<Object>)
не застосовується для аргументу List<String>
":
public static void test(List<Object> list){
System.out.println(list);
}
Якби я спробувати це , то я отримав «Не відлиті з List<String>
до List<Object>
»:
test((List<Object>) names);
Я збентежений. String
є підкласом Object
, так чому це не List<String>
підклас List<Object>
?
2
. Я пишу кілька кодів, щоб продемонструвати це в2
. tyvm