Findbugs 警告:Equals 方法不应假定其参数的类型
在我的项目上运行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
}