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

Kev*_*lan 10 java generics map

可能重复:
Map.get(Object key)不是(完全)泛型的原因是什么

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

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

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

Joa*_*uer 9

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

它需要equalhashCode键一样返回,但规范中没有任何内容表明它必须属于同一类型.

这个事实很少被使用,并且大多数时候您将使用与用于存储它们的键相同的键(或至少相同类型的对象)来检索值.

但由于这是"旧"中支持的用例HashMap,因此它也需要在泛型版本中得到支持.

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

  • @Kevin:该特定示例不起作用,因为“Integer”和“Double”没有兼容的“equals()”实现。 (2认同)