Які відмінності між 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