[英]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.