2015-04-14 87 views
1

我得到FindBugs錯誤,我很困惑如何解決。由於這是舊的,遺留的代碼,我不能做太多的事情。 equals()實現,並不完美,但它的工作,但靜態代碼分析顯示錯誤。FindBugs:重寫equals()導致靜態代碼分析錯誤EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS

FindBugs的錯誤:

EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS Equals checks for incompatible operand

關於如何解決此問題有什麼建議?

我做了一些調整,但無法防止此錯誤。

class Account extends ManagedAccount{ 

    String accountId; 
    public void setAccount(EntityId value) { 
     //some setter 
    } 
    void EntityId getAccountId() { 
     return EntityId;//EntityId is some class 
    } 

    public boolean equals(Object o) { 
     if (o instanceof Account) { 
      if (this.getAccountId().equals(o))) { 
       return super.equals(o); 
      } 
     } 
     return false; 
    } 
} 
+0

'accountId'令人困惑,因爲a)這裏沒有使用它,b)'getAccountId'返回一些其他'EntityId'字段。 –

回答

1

大概FindBugs的觸發在第三行的equals方法:

if (this.getAccountId().equals(o))) 

有一些奇怪的事情在這裏。你比較this.getAccountId()與整個對象o

只要修復這條線,一切都應該沒問題。

+0

爲了說明一下,你正在比較一個'Account'實例('o')和'this'的'EntityId'字段(一個類的名字?),這是一件非常奇怪的事情。它應該可能是'if(this.getAccountId()。equals(((Account)o).getAccountId()))',儘管我仍然沒有得到'accountId' /'EntityId'的二分法。 –