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