Beim Ausführen von FindBugs auf meinem Projekt, habe ich ein paar Instanzen des oben beschriebenen Fehlers.Findbugs Warnung: Equals-Methode sollte nichts über den Typ des Arguments annehmen
Nämlich überschreiben meine überschreibenden Versionen von equals das RHS-Objekt in den gleichen Typ wie das Objekt, in dem die überschreibende Version definiert ist.
Ich bin mir jedoch nicht sicher, ob ein besseres Design möglich ist, da AFAIK Java keine Varianz in den Methodenparametern zulässt. Daher ist es nicht möglich, einen anderen Typ für den Parameter equals zu definieren.
Mache ich etwas sehr falsch, oder sind FindBugs zu eifrig? Ein anderer Weg, diese Frage zu formulieren, ist: Was ist das richtige Verhalten, wenn das Objekt, das an equals übergeben wird, nicht der gleiche Typ wie ein LHS ist: Ist das ein false oder sollte es eine Ausnahme geben?
Zum Beispiel:
public boolean equals(Object rhs)
{
MyType rhsMyType = (MyType)rhs; // Should throw exception
if(this.field1().equals(rhsMyType.field1())... // Or whatever
}
das klingt ein bisschen seltsam. Bitte zeigen Sie uns einen Code. –