重寫Java 的equals() 方法:要避免的陷阱
在Java 中,equals() 方法在物件比較中起著至關重要的作用。如果做得不正確,重寫此方法可能會充滿陷阱。
作為一個恰當的例子,請考慮所描述的場景,其中使用採用 Book 參數的方法重寫 equals() 會導致意外行為。這是因為 Java 固有的 equals() 方法被定義為採用 Object 參數,而不是像 Book 這樣的特定類型。
範例中使用的 ArrayList 類別採用重寫的 equals() 方法來決定相等性物件之間(例如 contains() 和 equals())。但是,它不適用於重載的 equals() 方法(即採用特定型別參數的方法)。
正確的覆蓋與重載
在這種情況下, public boolean equals(Book other) 是重載,而不是重寫,因為它的參數類型與基於物件的equals() 方法不同Object.
重寫equals()的最佳實踐
為了避免此類問題,建議在重寫equals() 時遵循以下最佳實踐:
@Override public boolean equals(Object other){ if (other == null) return false; if (other == this) return true; if (!(other instanceof MyClass)) return false; MyClass otherMyClass = (MyClass)other; ...test other properties here... }
此範本提供了全面的檢查用於null、自引用和實例類型相容性,確保正確的功能。
以上是為什麼重寫 Java 的 equals() 方法需要特別小心?的詳細內容。更多資訊請關注PHP中文網其他相關文章!