2009-06-25 30 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键)虽然我不知道,但我猜它必须处理向后兼容性问题。