Jakie są różnice między List, List<?>, List<T>, List<E>, i List<Object>?
1. Lista
List: jest typem surowym, dlatego nie typesafe. Wygeneruje błąd czasu wykonywania tylko wtedy, gdy rzutowanie jest złe. Chcemy błędu czasu kompilacji, gdy rzutowanie jest złe. Nie zaleca się używania.
2. Lista <?>
List<?>jest nieograniczonym znakiem wieloznacznym. Ale nie jestem pewien, do czego to służy? Mogę wydrukować List<?>bez problemu:
public static void test(List<?> list){
System.out.println(list); // Works
}
Dlaczego nie mogę dodać elementów do List<?>?
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
3. Lista <T>
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
Nie rozumiem tej składni. Widziałem coś takiego i działa:
public <T> T[] toArray(T[] a){
return a;
}
Czasami widzę <T>, albo <E>, lub <U>, <T,E>. Czy wszystkie są takie same, czy reprezentują coś innego?
4. Lista <Obiekt>
Daje to błąd „Metoda test(List<Object>)nie ma zastosowania do argumentu List<String>”:
public static void test(List<Object> list){
System.out.println(list);
}
Jeśli spróbuję tego, otrzymam komunikat „Nie można przesyłać z List<String>do List<Object>”:
test((List<Object>) names);
Jestem zdezorientowany. Stringjest podklasą Object, więc dlaczego nie List<String>jest podklasą List<Object>?
2. Piszę kilka kodów, aby to zademonstrować2. tyvm