2010-02-19 63 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'捕獲