2009-06-25 19 views
1

可能重複(?):
What are the reasons why Map.get(Object key) is not (fully) generic的Java 6 Map.get()類型安全意外的行爲

根據的javadoc(http://java.sun.com/javase/6/docs/api/java/util/Map.html)的地圖界面,GET的定義

返回值

V的get(對象鍵)指定鍵映射,或空 如果此映射不包含映射爲 的關鍵。

代碼示例:

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

我希望上面的代碼將拋出一個異常,或至少給予警告。

我希望在泛型和類型安全方面,get方法會帶入一個類型參數。接受Object類型的原因是什麼?

+1

重複http://stackoverflow.com/questions/857420/what-are-the-reasons-why-map-getobject-key-is-not -fully -generic – skaffman 2009-06-25 19:20:09

回答

0

它只會返回null,因爲地圖永遠不會包含密鑰。

這是相同的原因,你可以從一個ArrayList<String>remove()一個Integer - 它的仿製藥之前的工作,因此保持這樣不打破舊的代碼。

+1

爲什麼這是downvoted? – mihi 2009-06-25 22:00:04

1

Map.get的定義是Ÿ得到一個地圖< X(對象鍵),Y>和Map.get將返回(鍵== NULL滿足K == NULL:?key.equals (K),我會期望返回null,除非你InstrumentInfo重載.equals是能夠比較整數。

爲什麼Ÿ得到(對象鍵)Ÿ得到(X鍵)雖然我不知道,但我猜它必須處理向後兼容性問題。