Quelles sont les différences entre List
, List<?>
, List<T>
, List<E>
, et List<Object>
?
Maintenant, je n'ai pas aveuglément poser cette question, donc merci de ne pas fermer ce fil. Permettez-moi d'abord introduire le code de base:
private static List<String> names = new ArrayList<String>();
static {
names.add("Tom");
names.add("Peter");
names.add("Michael");
names.add("Johnson");
names.add("Vlissides");
}
public static void test(List<String> set){
System.out.println(set);
}
public static void main(String args[]){
test(names);
}
Je comprends que:
1.List
: est une crue de type, donc pas typesafe
. Il ne fera que générer une erreur d'exécution lors de la coulée est mauvais. Nous voulons une erreur de compilation quand le plâtre est mauvais. Recommandé de ne pas utiliser.
2.List<?>
: est une surabondance de génériques. Mais vous ne savez pas ce que c'est? Donc si je change le test
méthode de
public static void test(List<?> set){
System.out.println(set);
}
il fonctionne encore bien. Si vous pouvez expliquer l'utilisation de cette application, je vous en serais très reconnaissante.
EDIT: Si je fais ceci:
public static void test(List<?> set){
set.add(new Long(2)); //--> Error
set.add("2"); //--> Error
System.out.println(set);
}
mais si je change test
de cette:
public static void test(List<String> set){
set.add(new Long(2)); //--> Error
set.add("2"); //--> Work
System.out.println(set);
}
3.List<T>
:
public static void test(List<T> set){ //T cannot be resolved
System.out.println(set);
}
Je suppose que je ne comprends pas cette syntaxe. J'ai vu quelque chose comme ça, et ça fonctionne:
public <T> T[] toArray(T[] a){
return a;
}
Veuillez l'expliquer moi s'il vous plaît? Parfois, je vois des <T>
ou <E>
ou <U>
, <T,E>
. Sont-ils tous les mêmes ou qu'elles ne représentent quelque chose de différent?
4.List<Object>
public static void test(List<Object> set){
System.out.println(set);
}
Puis j'ai eu l'erreur The method test(List<Object>) is not application for the argument List<String>
pour le code ci-dessous. Je suis confus. J'ai pensé String
a un sous-ensemble de l' Object
?
public static void main(String args[]){
test(names);
}
EDIT: Si j'essaie ce
test((List<Object>)names);
puis j'ai eu l' Cannot cast from List<String> to List<Object>