Bonjour
Je me demande pourquoi dans l'interface Map<K, V>, il y a la méthode "V get(Object key)" et non "V get(K key)"? il doit y avoir une raison précise pour cela mais je ne vois pas laquelle.
Merci
Bonjour
Je me demande pourquoi dans l'interface Map<K, V>, il y a la méthode "V get(Object key)" et non "V get(K key)"? il doit y avoir une raison précise pour cela mais je ne vois pas laquelle.
Merci
plusieurs raisons ont été avancées sur différents forums. Il me semble me souvenir que la plus crédible est que toutes les méthodes qui conduisent a un appel de equals(Object) doivent rester avec ce type d'argument sinon l'efffacement risque de pas bien conduire au bon endroit. (voir par exemple ArrayList remove etc....).
Il faudrait que je prenne le temps de bien vérifier le pourquoi de ce comportement.
autre raison avancée: compatibilité avec equals entre objets de nature différentes mais ça me semble exotique.
C'est comme pour ArrayList<T> ça possède une méthode remove(Object) et non T, tout simplement parce que tu peux faire par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Object eq = new Object() { @Override public boolean equals(Object o) { return //expression; } }; maList.remove(eq);
Merci pour les réponses mais on dirait qu'il y a parfois des bizarreries au niveau des generics.
J'aurais préféré avoir la méthode V get(K key) pour que le compilateur me signale des erreurs du type suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Map<String, String> nameMap = new HashMap<String ,String>(); ... String name = nameMap.get(un objet qui ne soit pas une String); // erreur
L'une de ces questions et réponses : Map.get(Object o) vs Map.get(K k) ?
j'ai un peu de mal à suivre.
je comprends ceci: à l'origine un problème d'effacement de code lorsqu'il y a capture (expression en ?). bon ça je m'en doutais.
mais apparement equals n'est pas le seul en cause il semble s'agir d'un phénomène de cohérence plus subtil lorsque des contraintes vont converger ....
Quelqu'un peut me détailler point par point le raisonnement ? (je suis friand de ce genre de chose:il existe d'autres cas d'anomalies apparentes bien saignantes)
Partager