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. Stringest 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