2011-10-04 3 views
2

Le code suivant explique mon problème:Borné wilcard ne fonctionne pas pour la liste insérée dans la carte

interface f1 {} 

interface f2 extends f1{} 


1. List<? extends f1> l1 = new ArrayList<f2>(); 

2. Map<String, ? extends f1> m1 = new HashMap<String, f2>(); 

3. Map<String, List<? extends f1>> m2 = new HashMap<String, List<f2>>(); 

n ° 1 et 2 travail, mais pas. 3 donne une erreur sur eclipse. Il est dit: Type mismatch: cannot convert from HashMap<String,List<f2>> to Map<String,List<? extends f1>> Pourriez-vous m'aider s'il vous plaît à comprendre pourquoi.

Répondre

3

Utilisez

Map<String, ? extends List<? extends f1>> m2 = new HashMap<String, List<f2>>(); 
+1

Merci beaucoup. Cela marche. Pouvez-vous s'il vous plaît expliquer la logique derrière cela? – Kes115

+1

Lorsque vous n'utilisez pas l'opérateur de caractère générique? vous spécifiez exactement un type spécifique, e. g., Chaîne. Vous ne pouvez pas faire quelque chose comme Liste l = new ArrayList (); La même chose arrive aux arguments de type imbriqués. Vous avez une carte contenant des chaînes et quelque chose qui est étendu à partir d'une liste qui contient quelque chose qui est étendu à partir de f1. –

Questions connexes