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

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

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

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

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

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

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

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

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

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