在我的項目上運行FindBugs時,出現了上述錯誤的幾個實例。Findbugs警告:Equals方法不應該假定任何關於其參數的類型
也就是說,我的重寫版本的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
}
這聽起來有點奇怪。請給我們看一些代碼。 – 2008-12-12 23:11:12