Java FindBugs有争议的描述
是我理解错了,还是描述错了 等于检查不相容性 操作数 (等式检查操作数与此操作数不兼容) 此方法正在检查以查看 如果论点是不相容的 类型(即,既不是 类的超类型或子类型 它定义了equals方法)。对于 例如,Foo类可能有一个 equals方法,该方法如下所示: 这被认为是一种不好的做法,因为它使人很难接受 实现一个equals方法 对称的和可传递的。没有 那些属性,非常出乎意料 行为是可能的 发件人: 描述中说Foo类可能有这样一个equals方法,然后说“这被认为是不好的做法”。我没有找到“正确的方法” 以下方法应该如何正确Java FindBugs有争议的描述,java,equals,findbugs,Java,Equals,Findbugs,是我理解错了,还是描述错了 等于检查不相容性 操作数 (等式检查操作数与此操作数不兼容) 此方法正在检查以查看 如果论点是不相容的 类型(即,既不是 类的超类型或子类型 它定义了equals方法)。对于 例如,Foo类可能有一个 equals方法,该方法如下所示: 这被认为是一种不好的做法,因为它使人很难接受 实现一个equals方法 对称的和可传递的。没有 那些属性,非常出乎意料 行为是可能的 发件人: 描述中说Foo类可能有这样一个equals方法,然后说“这被认为是不好的做法”。我没有找到
@Override
public boolean equals(Object obj) {
if (obj instanceof DefaultTableModel)
return model.equals((DefaultTableModel)obj);
else
return false;
}
当FindBugs的描述说某某“可能是这样”时,他们并不是说这是一种可接受的做法,而是说这是一种假设的情况,这将导致有问题的警告 您不应该说您的对象等于某个DefaultTableModel,因为无法强制该关系的自反性。这意味着
DefaultTableModel dtm = new DefaultTableModel(...);
YourObject foo = new YourObject(dtm);
foo.equals(dtm); // true
dtm.equals(foo); // false!
当FindBugs的描述说某某“可能是这样”时,他们并不是说这是一种可接受的做法,而是说这是一种假设的情况,这将导致有问题的警告 您不应该说您的对象等于某个DefaultTableModel,因为无法强制该关系的自反性。这意味着
DefaultTableModel dtm = new DefaultTableModel(...);
YourObject foo = new YourObject(dtm);
foo.equals(dtm); // true
dtm.equals(foo); // false!
该方法的第一个版本(FindBugs抱怨)的问题是它不对称 如果您有一个Foo对象
f
,其中f.equals(“someName”)
为true
,那么对称表示“someName.”equals(f)
也应为true
。但是您无法实现这一点:“someName”。对于任何非字符串的参数,equals(…)
将返回false
该方法的第二个版本也是错误的,因为您认为
Foo
实例可以等于DefaultTableModel
实例。。。但不是另一个Foo
实例。这意味着Foo
实例不能等于自身,因此equals
不是自反的。此外,尚不清楚模型的标识符是什么…该方法的第一个版本(FindBugs抱怨)的问题是它不对称
如果您有一个Foo对象f
,其中f.equals(“someName”)
为true
,那么对称表示“someName.”equals(f)
也应为true
。但是您无法实现这一点:“someName”。对于任何非字符串的参数,equals(…)
将返回false
该方法的第二个版本也是错误的,因为您认为Foo
实例可以等于DefaultTableModel
实例。。。但不是另一个Foo
实例。这意味着Foo
实例不能等于自身,因此equals
不是自反的。此外,模型
标识符是什么还不清楚…实现中不寻常的部分是将字段“model”与完整的对象“obj”进行比较。通常,您应该在检查自身的每个字段是否都属于同一类或子类后,将它们与另一个对象的每个字段进行比较。实现的不寻常之处在于将字段“模型”与完整的对象“obj”进行比较。通常,您应该在检查自身的每个字段是否都属于同一类或子类后,将其与另一个对象的每个字段进行比较。是的,上面已经解释并标记为正确答案。)是的,上面已经解释并标记为正确答案……)我认为你把及物动词和对称词混淆了。。。我一定累了。。。修正了。我认为你把及物和对称混淆了。。。我一定累了。。。固定的