簡體   English   中英

UnusedNullCheckInEquals :通過 equals 方法比較對象的正確方法是什么?

[英]UnusedNullCheckInEquals : What is the correct way to compare objects by equals method?

public class MyObjectList extends ArrayList<MyObject>

public boolean equals(Object o) {
    if (this == o) {
        return true;
    } else {
        return o != null && o.getClass().equals(this.getClass()) && super.equals(o);
    }
}

在 pmd 管道之后我有一個例外: UnusedNullCheckInEquals Priority:3 Invoke equals() 在您已經確保不為空的對象上。 好的,我稍微更改了代碼,現在測試通過了:

public boolean equals(Object o) {
    if (this == o) {
        return true;
    } else if (o == null) {
        return false;
    } else {
        return o.getClass().equals(this.getClass()) && super.equals(o);
    }
}

也許現在它並不那么重要,但我只是好奇是否有一種“正確”的正確方法可以通過這個 pmd 檢查而不添加額外的行......

return o != null && o.getClass().equals(this.getClass()) && super.equals(o);

您可以簡單地更改調用順序以通過測試並避免多余的null檢查:

public boolean equals(Object o) {
  if (this == o) {
    return true;
  } else if (!super.equals(o)) { // super.equals() will implicitly check for null
    return false;
  } else {
    return o.getClass().equals(this.getClass());
  }
}

當對象被代理時,您可能會被o.getClass().equals(this.getClass())困住。

我寧願使用類似的東西:

return this == o || o instanceof MyObjectList && super.equals(o);

如果onullinstanceof返回false

暫無
暫無

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

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