Quali sono le differenze tra List, List<?>, List<T>, List<E>, e List<Object>?
1. Elenco
List: è un tipo grezzo, quindi no typesafe. Genererà un errore di runtime solo quando il casting è difettoso. Vogliamo un errore di tempo di compilazione quando il cast è cattivo. Non è raccomandato l'uso.
2. Elenco <?>
List<?>è un carattere jolly senza limiti. Ma non sono sicuro a cosa serva? Posso stampare List<?>senza problemi:
public static void test(List<?> list){
System.out.println(list); // Works
}
Perché non riesco ad aggiungere elementi a List<?>?
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
3. Elenco <T>
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
Non capisco questa sintassi. Ho visto qualcosa del genere, e funziona:
public <T> T[] toArray(T[] a){
return a;
}
A volte, vedo <T>, o <E>, o <U>, <T,E>. Sono tutti uguali o rappresentano qualcosa di diverso?
4. Elenco <Oggetto>
Questo dà l'errore "Il metodo test(List<Object>)non è applicabile per l'argomento List<String>":
public static void test(List<Object> list){
System.out.println(list);
}
Se provo questo, ottengo "Impossibile List<String>eseguire il cast da a List<Object>":
test((List<Object>) names);
Sono confuso. Stringè una sottoclasse di Object, quindi perché non List<String>una sottoclasse di List<Object>?
2. Scrivo alcuni codici per dimostrarlo2. tyvm