上一篇討論覆寫 equals 時會遇到的問題,本篇來討論如何正確的覆寫 equals。
- 使用 == 來檢查,參數是否為本身的引用,如果是就不需要執行後續的比較,像 x.equals(x) 就馬上回傳 true。
- 用 instanceof 來檢查參數是否為正確型態,若不是就回傳 false。
- 將參數轉型為正確的型態。
- 對於該 class 的每個 field,檢查是否與參數的 field 相同。當 field 的型態是物件時,為避免 NullPointerException 的發生,所以建議使用 Objects.equals(Object, Object) 來比較,或是確定不為 null 的情況下,調用物件的 equals 來比對。在處理像是 float 及 double 等數值時,要用 Float.compare 與 Double.compare 來處理。
另外需要注意額外的幾件事:
- 覆寫 equals 時,總是要覆寫 hashCode,下一篇會討論。
- 不要讓 equals 過度複雜化,審慎評估是否有覆寫的必要。
- 不要將 equals 方法傳入的參數更變型態。
沒有留言:
張貼留言