kleiner_held hat gesagt.:
In dem Zusammenhang bin ich halt eher fuer eine sehr restriktive Handhabung von equals (also Konsistenz auch trotzt der Aenderung von mutable Properties) - auch weil ich schon mal viel Schweiss gelassen habe, um eine derartige Fehlerquelle zu finden. Solche Erfahrungen prägen halt
Das Problem liegt aber doch ganz woanderst.
Die Datenstruktur ist so definiert, dass doppelte Objekte (Keys, bei der Map) nicht vorkommen dürfen.
Da dies Probleme geben kann wenn man mit veränderbaren Objekten arbeitet ist klar.
(Und das ein Interface das Verhalten hier nicht definiert und den Programmierer warnt ist doch verständlich, da muss man sich schon die Implementierungen anschauen)
Jetzt gehst du den Weg einfach equals so zu definieren, dass es möglich ist zwei gleiche Objekte in ein Set, bzw eine Map zu stecken?
Wobei ich in diesem Zusammenhang "gleiche Objekte" nicht weiter definiere, denn im Prinziep ist es eben genau die equals Methode welche sich darum kümmern sollte.
Nur warum sollte man die Gleichheit von Objekten nach den verwendeten Datenstrukturen richten und nicht nach dem Objekt selber?
Es wird je nach Klasse entschieden wann zwei Objekte dieser Klasse gleich sind.
Dieser Grundsatz richtiet sich erstmal nur nach der Logik, ob man dann anhand der Attribute entscheidet oder nicht folgt nur daraus.
Da die vererbte equals Methode nur auf Instanzgleichheit prüft sollte man diese also überschreiben sobald zwei Objekte gleich sein können auch wenn es verschiedene Instanzen sind.
Das ist auch genau das was sun z.B bei deinen Beispielen gemacht hat:
- java.util.* hier sind die Objekte gleich wenn sie den selben Inhalt haben, daher ein richtiges equals.
- java.io.* die meisten Objekte sind nicht gleich, daher auch das standard equals.
- java.awt.* javax.swing.* die meisten Objekte sind nicht gleich, daher auch das standard equals.
Ein letztes Problem bleibt zwar immer offen: "Wann sind Objekte gleich" aber das ist halt die Frage die man sich bei jeder Klasse neu stellen muss.
EDIT: uiuiui ... krankes Hirn, verwirrender Text :autsch: