Commit 7da2a419 authored by Jakob Schöttl's avatar Jakob Schöttl
Browse files

Remove probably unused hash() and equals()

I searched for occurrences of Attributes or AttributesSource together
with Map/Set
parent b8025389
......@@ -136,78 +136,4 @@ public class AttributesSource extends Attributes {
return dynamicElementType;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((distributionParameters == null) ? 0 : distributionParameters.hashCode());
result = prime * result
+ ((dynamicElementType == null) ? 0 : dynamicElementType.hashCode());
long temp;
temp = Double.doubleToLongBits(endTime);
result = prime * result + (int) (temp ^ (temp >>> 32));
result = prime * result + id;
result = prime * result + ((interSpawnTimeDistribution == null) ? 0
: interSpawnTimeDistribution.hashCode());
result = prime * result + ((shape == null) ? 0 : shape.hashCode());
result = prime * result + (spawnAtRandomPositions ? 1231 : 1237);
temp = Double.doubleToLongBits(spawnDelay);
result = prime * result + (int) (temp ^ (temp >>> 32));
result = prime * result + spawnNumber;
temp = Double.doubleToLongBits(startTime);
result = prime * result + (int) (temp ^ (temp >>> 32));
result = prime * result + ((targetIds == null) ? 0 : targetIds.hashCode());
result = prime * result + (useFreeSpaceOnly ? 1231 : 1237);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AttributesSource other = (AttributesSource) obj;
if (distributionParameters == null) {
if (other.distributionParameters != null)
return false;
} else if (!distributionParameters.equals(other.distributionParameters))
return false;
if (dynamicElementType != other.dynamicElementType)
return false;
if (Double.doubleToLongBits(endTime) != Double.doubleToLongBits(other.endTime))
return false;
if (id != other.id)
return false;
if (interSpawnTimeDistribution == null) {
if (other.interSpawnTimeDistribution != null)
return false;
} else if (!interSpawnTimeDistribution.equals(other.interSpawnTimeDistribution))
return false;
if (shape == null) {
if (other.shape != null)
return false;
} else if (!shape.equals(other.shape))
return false;
if (spawnAtRandomPositions != other.spawnAtRandomPositions)
return false;
if (Double.doubleToLongBits(spawnDelay) != Double.doubleToLongBits(other.spawnDelay))
return false;
if (spawnNumber != other.spawnNumber)
return false;
if (Double.doubleToLongBits(startTime) != Double.doubleToLongBits(other.startTime))
return false;
if (targetIds == null) {
if (other.targetIds != null)
return false;
} else if (!targetIds.equals(other.targetIds))
return false;
if (useFreeSpaceOnly != other.useFreeSpaceOnly)
return false;
return true;
}
}
}
\ No newline at end of file
  • @BZoennchen @benjaminaaron wisst ihr, ob diese hashCode() und equals() gebraucht werden?

    Früher wurden die vllt verwendet um zu schauen ob sich Szenarios geändert haben. Jetzt wird das ja über die JSON Strings gemacht.

    Ich hab gesucht im ganzen Quellcode und die Klassen Attributes oder AttributesSource kommen nicht im Zusammenhang mit Set oder Map vor.

    Ich würde sie gerne loswerden, weil das nur Fehlerpotential ist. Z.B. wenn Felder dazukommen. Und man vergisst das anzupassen.

  • @schoettl Mir ist nicht bekannt ob diese noch benötigt werden ich glaube nicht. Sie zu haben finde ich aber nicht falsch. Wegen mir können wir diese löschen. Man bedenke, dass jede Attribute im scenario package eine solche Implementierung besitzt und somit würden wir alle diese löschen. Man könnte Sie löschen aber sollte man dann nicht in der equals der Topography eine UnsupportedEx.. werfen?

    @michael-seitz @dietrich was meint ihr?

  • Ich wäre echt stark für löschen:

    • Wer weiß, welche Felder in die Methoden reingehören? id?
    • Wer weiß, wie es implementiert sein muss? xx.getClass() == Xx.class vs. instanceof?
    • Wer weiß, wo/wie die Methoden gebraucht werden?
    • Wer weiß, ob sie gebraucht werden?

    Es geht ja auch darum, dass neue Entwickler richtig weiterentwickeln können. Und dass der Code nicht verrottet.

    Zum Beispiel die id ist manchmal dabei, manchmal nicht. Wenn man sie mit rein nimmt, dann kann man eigentlich auch die Referenzen vergleichen (oder das Standard equals() verwenden).

    Ich finde als Java-Entwickler, darf man nie blind davon ausgehen, dass hashCode() und equals() mit allen Feldern so implementiert sind wie man es braucht. Insofern würde ich die Implementierungen ersatzlos löschen. Wenn's wirklich wieder jemand braucht, wird er's schnell merken. Und dann könnte man z.B. auch in der Attributes Basisklasse beides so implementieren, dass das serialisierte JSON verglichen wird.

    Ich hab mal alle Methoden automatisch generieren lassen, und da gibt es schon Probleme (abgesehen von den Zeilenumbrüchen!): diffs.diff Auskommentierte Checks bei manchen Feldern, fehlende Implementierungen, id, instanceof, ...

    Die Spec fordert auch nicht, dass equals Felder vergleicht. Es kommt immer auf den Anwendungsfall an: https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)

  • Ghost User @ghost

    mentioned in merge request !6 (merged)

    ·

    mentioned in merge request !6 (merged)

    Toggle commit list
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment