为什么java.util.Map.get(…)不通用?
可能重复:
Map.get(Object key)不是(完全)generics的原因是什么
此方法和Map接口中的许多其他方法不是通用的。 几乎任何键值都需要作为参数,它接受Object,即remove,get和containsKey。
知道为什么他们做出这个决定。 我的假设是它是为了支持遗留代码,但对我来说,我认为这是一个弱势的立场。
任何人都可以向我提供一个特定的理由,为什么最好在这里接受Object而不是KeyType。
用于检索/删除/检查给定密钥是否存在的对象不一定必须与用于存储它的对象(=密钥)具有相同的类型。
它需要equal
并返回与键相同的hashCode
,但规范中没有任何内容表明它必须属于同一类型。
这个事实很少使用,并且大多数情况下,您将使用与用于存储它们的键相同的键(或至少相同类型的对象)检索值。
但由于这是“旧” HashMap
支持的用例,因此也需要在generics版本中支持它。
请注意, keySet()
使用特定类型的所有方法,因为它确实在调用put()
时确切地返回用作键的对象。