可能重复:
What are the reasons why Map.get(Object key) is not (fully) generic
根据Map接口的javadocs(http://java.sun.com/javase/6/docs/api/java/util/Map.html),get的定义是
V get(对象键) 返回指定键映射到的值,或者为null 如果此地图不包含任何映射 关键。
代码示例:
Map<InstrumentInfo, Double> moo = new HashMap<InstrumentInfo,Double>();
moo.get(new Integer(5));
我希望上面的代码会抛出异常或至少发出警告。
我希望通过泛型和类型安全性,get方法将接受类型的参数。接受Object类型的原因是什么?
答案 0 :(得分:2)
在这个问题中讨论What are the reasons why Map.get(Object key) is not (fully) generic,以及......
答案 1 :(得分:1)
对于 Map&lt; , Y get(对象键)的定义是 X,Y&gt; 并且Map.get将返回(key == null?k == null:key.equals(k),我希望它返回null,除非你的InstrumentInfo有重载.equals能够与整数进行比较。
为什么 Y得到(对象键)不是 Y得到(X键)我不知道,但我猜这与它有关向后兼容性问题。
答案 2 :(得分:0)
它只会返回null,因为地图永远不会包含密钥。
这就是为什么remove()
来自Integer
的{{1}}的原因相同 - 它在泛型之前有效,因此不会破坏旧代码。