Каковы различия между 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