2011-01-13 79 views
8

可能重复:
What are the reasons why Map.get(Object key) is not (fully) generic为什么java.util.Map.get(...)不是泛型的?

此法等一批在地图界面的其他方法不通用。几乎任何一个键值都可以作为参数预期,它接受Object,即remove,get和containsKey。

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

谁能给我提供一个具体的理由为什么它会是最好的位置,而不是关键字类型接受对象。

+3

在过去的6年中,这个问题已被多次询问。我建议你搜索现有的答案 – 2011-01-13 07:43:34

+0

相同与删除,containsValue,containsKey,... – aioobe 2011-01-13 07:44:24

回答

8

用于检索/删除/检查对于给定的键的所有脑干中的对象不一定是相同类型的如用于存储它(=键)的对象。

它需要是equal并返回相同的hashCode作为关键,但规范中没有说明它必须是相同的类型。

这其实是很少使用,大部分的时间你会检索与相同的键(或者在同一类型的至少对象),你用它来存储他们的人的价值观。

但由于在“老” HashMap是支持的使用情况下,它需要在仿制药版本,以及支持。

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