Ich habe kürzlich einige equals
Methoden in Domain-Objekten meines letzten Java-Projekts überschrieben. Da wir Sonar verwenden, um unsere Code-Metriken zu berechnen, sah ich sofort, dass die zyklomatische Komplexität dieser Klassen über einen Schwellenwert anstieg.Wie überschreiben Sie gleich, ohne die zyklomatische Komplexität zu erhöhen?
Ich frage mich, ob es einen cleveren Weg, Muster oder Option überhaupt gibt, um diese Metrik niedrig zu halten, obwohl ein wenig komplizierter equals
Methode.
EDIT: Hier ist eines meiner Beispiele, die ich habe, nichts wirklich Spezifisches würde ich sagen, nur damit wir wissen, worüber wir reden.
@Override
public boolean equals(Object o) {
if (o instanceof MyKey) {
MyKey other = (MyKey) o;
if (this.foo.longValue() == other.getFoo().longValue() &&
this.bar.equalsIgnoreCase(other.getBar()) &&
this.foobar.shortValue() == other.getFoobar().longValue()){
return true;
}
}
return false;
}
@Override
public int hashCode() {
int hash = 3;
hash = 53 * hash + foo.hashCode();
hash = 53 * hash + bar.hashCode();
hash = 53 * hash + foobar.hashCode();
return hash;
}
Sie können keinen Code hinzufügen, ohne Code hinzufügen, ich habe Angst. Wenn die Logik der überschriebenen Methode wiederverwendbar ist, können Sie die Gesamterhöhung reduzieren, indem Sie sie durch Vererbung wiederverwenden, aber es wird immer noch eine Erhöhung geben. –
Vielleicht solltest du weniger ein Sklave von Sonar sein. Wenn du schlechten Code schreibst, der Sonars Robotergeist erfreut, wird es immer noch schlechter Code sein. – Kayaman
Ich denke, Sie könnten versuchen, objects.equals' Methode. Auf diese Weise eliminieren Sie zusätzliche if-Anweisungen. – Enigo