Ich habe eine Schnittstelle A
, die Klasse B
implementiert.Java Generics Curiosity
Die folgende generische Methode funktioniert
public static <T, U extends T> List<T> listFactory(Collection<U> source) {
return new ArrayList<T>(source);
}
aber
public static <T> List<T> listFactory(Collection<? extends T> source) {
return new ArrayList<T>(source);
}
nicht (Übersetzungsfehler, Typ stimmt nicht überein), wenn ich die Ausgabe in
List<A> tester = listFactory(B.defaultCollectionFactory(3));
defaultCollectionFactory(int count)
statisch leite bietet eine Sammlung von B
s, mit ein Standardkennzeichnungsschema
Keine Erkenntnisse darüber, warum das so ist? Es sieht so aus, als würden das generische U und der Platzhalter dasselbe tun.
Wie funktioniert es "nicht"? Was ist die Fehlermeldung? – newacct
Sieht so aus, als hätten Sie unten zwei richtige Antworten für das, was das Problem verursacht - aber ich würde ihren Rat nicht wörtlich nehmen. Bleiben Sie bei der Nicht-Wildcard-Version, sodass der Aufrufer der Methode diese Begrenzung der Platzhalter nicht umgehen muss. –
@newacct: Kompilierungsfehler, Typ stimmt nicht überein – Carl