私はそれを間違って理解していますか、それとも説明が間違っていますか?
互換性のないオペランドのチェックに等しい(EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS)
このequalsメソッドは、引数が互換性のない型(つまり、equalsメソッドを定義するクラスのスーパータイプでもサブタイプでもないクラス)であるかどうかを確認しています。たとえば、Fooクラスには次のようなequalsメソッドがあります。
public boolean equals(Object o) {
if (o instanceof Foo)
return name.equals(((Foo)o).name);
else if (o instanceof String)
return name.equals(o);
else return false;
これは、対称で推移的なequalsメソッドの実装を非常に困難にするため、悪い習慣と見なされます。これらのプロパティがないと、非常に予期しない動作が発生する可能性があります。
差出人:http ://findbugs.sourceforge.net/bugDescriptions.html#EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS
説明には、Fooクラスにはそのようなequalsメソッドがある可能性があり、その後、「これは悪い習慣と見なされます」と書かれています。私は「正しい道」を得ていません。
次の方法はどのように正しくあるべきですか?
@Override
public boolean equals(Object obj) {
if (obj instanceof DefaultTableModel)
return model.equals((DefaultTableModel)obj);
else
return false;
}