Каковы различия между 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. Список <Объект>
Это дает ошибку «Метод 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