2010-02-19 32 views
11

为什么HashMap扩展AbstractMap并实现Map?扩展AbstractMap是不够的,因为AbstractMap实现了Map?Java.util.HashMap - 为什么HashMap扩展AbstractMap并实现Map?

+1

基本上与此相同的问题: http://stackoverflow.com/questions/2165204/why-does-linkedhashsete-extend-hashsete-and-implement-sete - - 简短版本:这种冗余会对Javadoc的生成方式产生影响。 – 2010-02-19 17:29:53

+0

我被刺激调查,实际上,Javadoc不是问题。新的简短版本:这只是一个错误。 – 2010-02-19 17:41:50

+0

heh。我今天也问过这个。我被告知这是一个“善意的错误”,并且最初的推理是我在答案中提到的接口与实现的关系。 – 2010-02-20 02:09:04

回答

5

这是多余的。我怀疑这是出于“文档”的原因。 HashMap实现了Map,你可以依赖它。它扩展AbstractMap的事实可以说是一个实现细节。 (虽然未来版本的HashMap不太可能扩展AbstractMap,因为可能有的一些代码在那里,希望HashMap可以分配给AbstractMap。)

0

它是多余的,但并不伤害。如果他们不想在将来执行 AbstractMap,它仍然可以工作。

+3

除了这是一个突破性的改变 - 某处某人将会完成“Map map = objectOfTypeAbstractMap”。 – 2010-02-19 08:26:56

0

还有一件事是AbstractMap是一个实现细节。它可能在Oracle JDK的未来版本中不存在。它可能在当前版本的IBM JDK中不存在。但是,无论它是否存在,HashMap都应始终符合List协议。因此,它明确地在类声明中通过指定'HashMap implements Map'捕获

相关问题