2017-08-11 112 views

回答

4

Collection JavaDoc

雖然 的Collection接口增加了不規定合同 一般爲Object.equals,誰落實Collection 接口「直接」(即程序員,創建一個類,是 Collection但不是SetList)必須小心,如果他們 選擇覆蓋Object.equals。沒有必要這樣做, ,最簡單的方法是依靠Object的 實現,但實現者可能希望實現「值 比較」來代替默認的「參考比較」。 (該ListSet接口任務這樣的值的比較。)

爲等於 必須是對稱的Object.equals方法狀態的一般合同(換句話說,a.equals(b)當且僅當 b.equals(a))。 List.equalsSet.equals的合同規定 列表僅與其他列表相同,並設置爲其他集合。因此,對於既不實現 List也不實現Set接口的集合類的自定義等於方法必須返回false,此集合是 與任何列表或集合相比較。 (通過相同的邏輯,這是不可能的 編寫正確的同時實現Set和List 接口的類。)

雖然Collection接口沒有增加規定向一般Object.hashCode方法的合同,程序員應該注意,任何覆蓋Object.equals方法的類都必須覆蓋Object.hashCode方法,以滿足Object.hashCode方法的一般合同。特別是,c1.equals(c2)意味着c1.hashCode()==c2.hashCode()

1

要回答你的具體問題:爲什麼它有這些方法?這只是爲了方便起見,可以包含Java Docs,提供關於實現者應該如何處理這些方法的提示(例如比較值的相等而不是引用)。

0

當任何類實現接口時,它會注入/接受由接口定義的合約/規則。

Equalable & Hashable是兩個默認提供的合同/規則。通過這樣做假設給定類的equals和hashCode對該類是正確實現的。

相關問題