2009-06-25 10 views
1

Mögliche Duplizieren (?):
What are the reasons why Map.get(Object key) is not (fully) genericJava 6 map.get() Typ Sicherheit unerwartetes Verhalten

Nach dem javadocs (http://java.sun.com/javase/6/docs/api/java/util/Map.html) für die Map-Schnittstelle, die Definition von get ist

V get (Object key) den Wert zurück, auf die die angegebenen Schlüssel zugeordnet ist, oder null wenn diese Karte nicht enthält Zuordnung für der Schlüssel.

Codebeispiel:

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

Ich würde erwarten, dass der obige Code wird eine Ausnahme werfen oder zumindest eine Warnung.

Ich würde erwarten, dass mit Generics und Typ Sicherheit, würde die Get-Methode einen Parameter des Typs aufnehmen. Was ist der Grund für den Typ Objekt und nicht?

+1

Duplizieren von http://stackoverflow.com/questions/857420/what-are-the-reasons-why-map-getobject-key-is-not-fully -generic – skaffman

Antwort

0

Es wird nur null zurückgegeben, da die Karte den Schlüssel niemals enthalten kann.

Dies ist der gleiche Grund, warum Sie ein Integer von einem ArrayList<String>remove() können - es vor Generika gearbeitet, so dass es auf diese Weise für nicht bricht alten Code gehalten wurde.

+1

Warum wurde das abgelehnt? – mihi

1

Die Definition von map.get ist Y get (Object key) für eine Karte < X, Y> und die map.get zurückkehren (Taste == null k == null: key.equals (k), die ich null zurück erwarten würde, es sei denn, Ihr InstrumentInfo haben überlasteten .equals der Lage sein, zu ganzen Zahlen zu vergleichen.

Warum Y erhalten (Object key) ist nicht Y erhalten (X-Taste) Ich weiß zwar nicht, aber ich denke, es hat mit Rückwärtskompatibilität Probleme zu tun.