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