J'ai une interface A
, qui est implémentée par la classe B
.Java Generics Curiosité
La méthode générique suivante fonctionne
public static <T, U extends T> List<T> listFactory(Collection<U> source) {
return new ArrayList<T>(source);
}
mais
public static <T> List<T> listFactory(Collection<? extends T> source) {
return new ArrayList<T>(source);
}
ne fonctionne pas (erreur de compilation, incompatibilité de type), quand je dirige la sortie en
List<A> tester = listFactory(B.defaultCollectionFactory(3));
defaultCollectionFactory(int count)
statiquement fournit une collection de B
s, avec un schéma d'étiquetage par défaut.
Avez-vous une idée de pourquoi? Il semble que les génériques U et wildcard font la même chose.
Comment ça "ne fonctionne pas"? quel est le message d'erreur? – newacct
On dirait que vous avez deux bonnes réponses ci-dessous pour ce qui cause le problème - mais je ne prendrais pas leurs conseils à la lettre. Stick avec la version non générique, de sorte que l'appelant de la méthode ne doit pas contourner cette limitation de caractères génériques. –
@newacct: erreur de compilation, incompatibilité de type – Carl