为什么java.util.Map.get(...)不通用?

时间:2011-01-13 07:40:24

标签: java generics map

  

可能重复:
  What are the reasons why Map.get(Object key) is not (fully) generic

此方法和Map接口中的许多其他方法不是通用的。几乎任何键值都需要作为参数,它接受Object,即remove,get和containsKey。

知道他们为什么做出这个决定。我的假设是它是为了支持遗留代码,但对我来说,我认为这是一个弱势的地位。

任何人都可以向我提供一个特定的理由,为什么最好在这里接受Object而不是KeyType。

1 个答案:

答案 0 :(得分:9)

用于检索/删除/检查给定键的存在的对象不一定必须与用于存储它的对象(=键)的类型相同。

它必须是equal并返回与密钥相同的hashCode,但规范中没有任何内容表明它必须属于同一类型。

很少使用这个事实,并且大部分时间你都会使用与用于存储它们的键相同的键(或至少相同类型的对象)来检索值。

但由于这是“旧”HashMap中支持的用例,因此也需要在泛型版本中支持。

请注意keySet()使用特定类型的所有方法,因为它确实会在调用put()时准确返回用作键的对象。