在我的项目上运行 FindBugs 时,我遇到了一些上述错误的实例。
也就是说,我的 equals 覆盖版本将 RHS 对象转换为与定义覆盖版本的对象相同的类型。
但是,我不确定是否有可能有更好的设计,因为 AFAIK Java 不允许方法参数发生变化,因此无法为 equals 参数定义任何其他类型。
是我做错了什么,还是 FindBugs 太急切了?
表达这个问题的另一种方式是:如果传递给 equals 的对象与 LHS 的类型不同,那么正确的行为是什么:这是错误的,还是应该有例外?
例如:
public boolean equals(Object rhs)
{
MyType rhsMyType = (MyType)rhs; // Should throw exception
if(this.field1().equals(rhsMyType.field1())... // Or whatever
}