重寫Java 的equals() 方法:要避免的陷阱
在Java 中,equals() 方法在物件比較中起著至關重要的作用。如果做得不正確,重寫此方法可能會充滿陷阱。
作為一個恰當的例子,請考慮所描述的場景,其中使用採用 Book 參數的方法重寫 equals() 會導致意外行為。這是因為 Java 固有的 equals() 方法被定義為採用 Object 參數,而不是像 Book 這樣的特定類型。
範例中使用的 ArrayList 類別採用重寫的 equals() 方法來決定相等性物件之間(例如 contains() 和 equals())。但是,它不適用於重載的 equals() 方法(即採用特定型別參數的方法)。
正確的覆蓋與重載
- 重寫: 在子類別中重新定義具有相同名稱、參數和傳回值的方法type 作為其超類別方法。
- 重載: 在一個類別中建立多個具有相同名稱但不同參數或傳回類型的方法。
在這種情況下, public boolean equals(Book other) 是重載,而不是重寫,因為它的參數類型與基於物件的equals() 方法不同Object.
重寫equals()的最佳實踐
為了避免此類問題,建議在重寫equals() 時遵循以下最佳實踐:
- 使用@Override 註解: 此註解透過確保方法確實重寫了超類別方法。
- 遵循通用模式:定義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中文網其他相關文章!
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
刺客信條陰影:貝殼謎語解決方案
3 週前ByDDD
Windows 11 KB5054979中的新功能以及如何解決更新問題
2 週前ByDDD
在哪裡可以找到原子中的起重機控制鑰匙卡
3 週前ByDDD
節省R.E.P.O.解釋(並保存文件)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
刺客信條陰影 - 如何找到鐵匠,解鎖武器和裝甲定制
4 週前ByDDD

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Dreamweaver Mac版
視覺化網頁開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能