Java中是否有任何內置合同檢查對於hashcode和equals函數之間的契約?Java合同檢查 - 內置?例如。哈希碼/等於
對於這個問題,讓我們堅持以hashcode/equals合同爲例,但我一般感興趣的是合同檢查。我曾在多個地方讀取equals和hashCode必須滿足Java中的「合同」:
- 的Equals必須遵循的equivalence relation的三個規則,也必須是在重複調用一致
- 相等對象意味着等於哈希碼
我瞭解條件,而且他們對我有意義。但是,我想知道,這僅僅是一個寫在紙上的合同 - 本質上是開發人員不寫出錯誤代碼的強有力的指導原則 - 或者它會被Java作爲編譯時或運行時異常捕獲的東西?
它不會被Java作爲編譯時或運行時異常捕獲。 (編寫代碼)堅持繼續RACT。 – nbokmans
如果等於相同並不意味着哈希碼相同,那麼你可以得到一些奇怪的行爲。例如。相同的對象可以映射到散列映射中的不同桶。 –
謝謝你們,那就是我的想法。所以對於Java而言,它基本上是一個強有力的指導方針,不會編寫那些將會非常糟糕和錯誤的代碼......但是我們仍然可以在理論上編寫一個違反合同的程序,並且它可以編譯並運行良好,多年來沒有任何錯誤變得明顯。 –