2016-06-11 69 views
0

我知道我應該重寫hasCode每次我重寫equals,但是重載呢?我還應該重寫hashCode嗎?如果我重載equals應該仍然覆蓋java中的haschode?

附註:在發佈問題之前,我已經讀過,我應該避免重載等於首位,但我仍然想知道如果我選擇重載它,該怎麼辦。

+3

重載'equals'?你的意思是*重寫*?你的用例究竟是什麼?如果你重載它,那麼它有一個非常不同的含義(即你的重載方法不會覆蓋'Object.equals'了,另請參閱http://stackoverflow.com/questions/12787947/overriding-object-equals-vs-超載-它)。 – Tunaki

+0

誤讀的問題,對不起,重新打開,因爲這是錯誤的副本。 –

+0

@Tunaki我打算確實重載等於,我知道它定義了一個新的方法,但仍然不知道我是否應該重寫hashCode:我認爲,因爲我正在創建一個新的equals,理論上我會一直使用,而不是Object I中的一個將不得不重新定義一個新的hashCode。你的鏈接很好地解釋了爲什麼不重載等於和超載可能會失敗(與集合),所以感謝+1 –

回答

2

否基於哈希的集合將永遠使用您的重載的equals()方法。這是你的方法,你決定它應該做什麼。合同因此完全屬於你。

但我會重複你在你的問題中所說的:你不應該在第一個地方重載equals()。如果這樣做,至少應該使其與實際的equals(Object)方法一致,以避免大多數混淆。由於它應該與equals()一致,這意味着您需要重寫equals(Object),並因此也覆蓋hashCode()。

相關問題