Was sind die Unterschiede zwischen List, List<?>, List<T>, List<E>, und List<Object>?
1. Liste
List: ist ein Rohtyp, daher nicht typesafe. Es wird nur dann ein Laufzeitfehler generiert, wenn das Casting schlecht ist. Wir möchten einen Fehler bei der Kompilierung, wenn die Besetzung schlecht ist. Nicht zu empfehlen.
2. Liste <?>
List<?>ist eine unbegrenzte Wildcard. Aber ich bin nicht sicher, wofür es ist? Ich kann List<?>ohne Probleme drucken :
public static void test(List<?> list){
System.out.println(list); // Works
}
Warum kann ich keine Elemente zu einem hinzufügen List<?>?
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
3. Listen Sie <T> auf
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
Ich verstehe diese Syntax nicht. Ich habe so etwas gesehen und es funktioniert:
public <T> T[] toArray(T[] a){
return a;
}
Manchmal sehe ich <T>, oder <E>, oder <U>, <T,E>. Sind sie alle gleich oder repräsentieren sie etwas anderes?
4. Listen Sie <Objekt> auf
Dies gibt den Fehler "Die Methode test(List<Object>)ist für das Argument nicht anwendbar List<String>":
public static void test(List<Object> list){
System.out.println(list);
}
Wenn ich das versuche, bekomme ich "Kann nicht von List<String>bis gewirkt werden List<Object>":
test((List<Object>) names);
Ich bin verwirrt. Stringist eine Unterklasse von Object, warum ist also keine List<String>Unterklasse von List<Object>?
2. Ich schreibe einige Codes, um dies zu demonstrieren2. tyvm