Quelles sont les différences entre List
, List<?>
, List<T>
, List<E>
et List<Object>
?
1. Liste
List
: est un type brut, donc non typesafe
. Il ne générera une erreur d'exécution que lorsque le casting est mauvais. Nous voulons une erreur de temps de compilation lorsque le cast est mauvais. Non recommandé à utiliser.
2. Liste <?>
List<?>
est un caractère générique illimité. Mais je ne sais pas à quoi ça sert? Je peux imprimer un List<?>
sans problème:
public static void test(List<?> list){
System.out.println(list); // Works
}
Pourquoi ne puis-je pas ajouter d'articles à un List<?>
?
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
3. Liste <T>
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
Je ne comprends pas cette syntaxe. J'ai vu quelque chose comme ça, et ça marche:
public <T> T[] toArray(T[] a){
return a;
}
Parfois, je vois <T>
, ou <E>
, ou <U>
, <T,E>
. Sont-ils tous identiques ou représentent-ils quelque chose de différent?
4. Liste <Objet>
Cela donne l'erreur "La méthode test(List<Object>)
n'est pas applicable pour l'argument List<String>
":
public static void test(List<Object> list){
System.out.println(list);
}
Si j'essaye ceci, je reçois "Impossible de lancer la diffusion List<String>
vers List<Object>
":
test((List<Object>) names);
Je suis confus. String
est une sous - classe de Object
, alors pourquoi n'est pas List<String>
une sous - classe List<Object>
?
2
. J'écris quelques codes pour le démontrer2
. tyvm