Map<String, Map<String, Boolean>> myMap = new HashMap<String,HashMap<String,Boolean>>();
Pourquoi ne pas travailler en java, mais cela ne
Map<String, Map<String, Boolean>> myMap = new HashMap<String,Map<String,Boolean>>();
Juste pour préciser ci-dessous l'altération de la imbriquée HashMap montre une erreur de compilation, alors que le ci-dessus ne sont pas; avec une Carte (pas hashmap)
Map<String, Map<String, Boolean>> myMap = new HashMap<String,HashMap<String,Boolean>>();
OriginalL'auteur NimChimpsky | 2010-09-03
Vous devez vous connecter pour publier un commentaire.
C'est parce que les médicaments génériques en Java sont invariant, c'est à dire même si la classe B est un A, un
Collection<B>
est pas unCollection<A>
.Et c'est pour une bonne raison. Si votre exemple, étaient légales, ce serait possible:
Dans ce cas, voir la réponse de Boris.
voir mon jour exemple.
Java, les génériques peuvent utiliser que du côté de la variance, mais pas de déclaration côté de la variance. (Le dernier a du sens pour les langues où il est idiomatiques pour les interfaces "dire de ne pas demander" ou sont immuables.)
Je comprends le pourquoi d'un point de vue technique, elle a fait de la mise en œuvre des génériques plus facile. Mais à partir d'un point de vue fonctionnel, il n'est pas logique. Si je dis (que je ne peut pas le faire) que ma carte contient les valeurs de la carte, que j'ai également s'engager à ne pas obtenir un type spécifique de la carte sortir de là. Mais je ne peux pas dire que cette carte contient des cartes, mais il doit contenir un type spécifique de la carte. Et c'est, pour moi, un compromis pour faire de la mise en œuvre des génériques faisable, et pas une caractéristique 🙂
OriginalL'auteur Péter Török
Dans le second cas
myMap
est une carte dont les clés sont de typeString
et les valeurs sont de typeMap<String, Boolean>
.HashMap<String, Boolean>
n'est pas unMap<String, Boolean>
il la met en œuvre. Par conséquent, cela permettra de compiler:Ricky du droit, l'utilisation de "une" est malheureux (depuis HashMap isa Carte). Essentiellement à l'aide de
? extends
détend le Générique de type de l'exigence de correspondance exacte avec la hiérarchie d'héritage de correspondance.OriginalL'auteur Boris Pavlović
Je pense que c'est à cause de la différence entre
Map<String, Boolean>
etHashMap<String,Boolean>
.En effet, les génériques sont ici un cahier des charges, qui doit être la même sur les deux côtés. (ou du moins c'est mon avis).
OriginalL'auteur Riduidel