簡體   English   中英

Java合同檢查-內置? 例如,哈希碼/等於

[英]Contract Checking in Java - In Built? E.g. Hashcode/Equals

Java中是否有任何內置的合同檢查功能,例如哈希碼和equals函數之間的合同?

對於這個問題,讓我們以哈希碼/等號合約為例,但我通常對合約檢查感興趣。 我在多個地方讀過等於,並且哈希碼必須滿足Java中的“合同”要求:

  • 等於必須遵循等價關系的三個規則,並且在重復調用時必須保持一致
  • 相等的對象意味着相等的哈希碼

我了解條件,這些條件對我來說很有意義。 但是,我想知道,這是只寫在紙上的合同嗎?對於開發人員不要編寫錯誤的代碼本質上是一個強力指導方針嗎?或者它會被Java視為編譯時或運行時異常?

它不會在編譯時強制執行。

某些類可能會在運行時強制執行該行為-例如,您可以編寫一種方法來檢查兩個相等的對象是否具有相同的哈希碼或發送異常。

另請注意,在某些情況下,您可能會故意偏離建議的合同。

它不會(也不能被)在編譯或運行時自動捕獲(除非您明確檢查它)。

簡單的計數器示例:

public boolean equals(Object other){
    return new Random().nextInt(3) == new Random().nextInt(3);
}

public int hashCode() {
    return new Random().nextInt(3);
}

但是,創建檢查這些合同的單元測試是一個好主意。 我遇到了由於利用錯誤實現的equals / hashcode而難以發現的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM