奇怪的Findbugs错误与equals

fas*_*ava 0 java static-analysis findbugs equals

我等于这个方法,但Findbugs报告错误,任何想法?

@Override
public boolean equals(final Object obj) {
    return obj instanceof String && this.value != null  
                              && this.value.equals(obj);      // this.value is a String
}
Run Code Online (Sandbox Code Playgroud)

错误是:

Myclass.equals(Object) 检查操作数是否为String

Mic*_*zka 7

您对equals的实现MyClass将至少打破equals-contract的对称和反身属性:

对称:

对于任何非空引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)才应返回true.

在你的情况下:

MyClass A例如,value ="a": A.equals("a")将为true,但"a".equals(A)为false.这违反了对称属性.

反思:

对于任何非空引用值x,x.equals(x)应返回true.

但是你的实现将返回false

A.equals(A) 
Run Code Online (Sandbox Code Playgroud)

但必须返回true.

等等.