[英]Equals Method for assertEquals with String-objects to compare
[英]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);
如果o
為null
, instanceof
返回false
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.