小编典典

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

java

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

他们为什么做出这个决定的任何想法。我的假设是这样做是为了支持遗留代码,但是对我而言,我认为这是一个弱势地位。

谁能提供给我一个具体的原因,为什么最好在这里接受Object而不是KeyType。


阅读 209

收藏
2020-11-01

共1个答案

小编典典

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

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

这个事实很少使用,大多数时候,您将使用与存储键相同的键(或至少具有相同类型的对象)来检索值。

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

请注意,所有keySet()使用特定类型的方法,因为可以确保put()在调用时完全返回用作键的对象。

2020-11-01