2009-06-25 7 views
1

Possible en double (?):
What are the reasons why Map.get(Object key) is not (fully) genericJava 6 map.get() Type comportement inattendu sécurité

Selon les javadocs (http://java.sun.com/javase/6/docs/api/java/util/Map.html) pour l'interface de la carte, la définition de get est

V get (Object key) Renvoie la valeur à laquelle la clé spécifiée est mise en correspondance, ou null si cette carte ne contient pas mappage pour la clé.

Exemple de code:

Map<InstrumentInfo, Double> moo = new HashMap<InstrumentInfo,Double>(); 
moo.get(new Integer(5)); 

j'attendre à ce que le code ci-dessus lancera une exception ou au moins donner un avertissement.

Je m'attendrais à ce que, avec les génériques et la sécurité de type, la méthode get prenne en paramètre un type. Quelle est la raison de prendre dans le type Objet et non?

+1

Duplicata de http://stackoverflow.com/questions/857420/quelles-les-raisons-pourquoi-map-getobject-key-is-notfully -generic – skaffman

Répondre

0

Il retournera simplement null, car la carte ne peut jamais inclure la clé.

C'est la même raison pour laquelle vous pouvez remove() un Integer d'un ArrayList<String> - il a travaillé avant les médicaments génériques il a été maintenu cette façon pour ne pas casser l'ancien code.

+1

pourquoi était-ce downvoted? – mihi

1

La définition de map.get est Y get (Object key) pour une Carte < X, Y> et map.get retournera (clé == null == null k: key.equals (k), que je vous attendriez à retourner nulle, à moins que votre InstrumentInfo ont surchargées .equals pour pouvoir comparer à entiers.

Pourquoi Y get (Object key) n'est pas Y get (touche X Je ne sais pas si, mais je suppose que cela a à voir avec des problèmes de compatibilité ascendante

Questions connexes