Hi,
ich habe eine Frage zur Erstellung von hashCode() Methoden.
Michael Inden behauptet in "Der Weg zum Java-Profi", dass eine hashCode() Methode nur die unveränderlichen Felder eines Objektes in die Berechnung mit einbeziehen darf. Die Argumentation klingt für mich schlüssig:
Wenn man auch veränderliche Felder mit einbezieht, dann findet man dieses Objekt in einer HashMap nicht wieder, sobald sich eines dieser Felder ändert.
Joshua Bloch hingegen schreibt in "Effective Java", dass alle Felder, die bei dem Vergleich in equals() relevant sind mit einbezogen werden müssen. Auch hierfür finde ich zumindest ein logisches Argument:
Wie soll ich ansonsten einen Hash für eine Klasse berechnen, die ausschließlich veränderbare Felder besitzt? Da könnte ich ansonsten nur eine Konstante zurückgeben, was bekanntlicherweise die schlechteste aller gültigen hashCode() Implementierungen darstellt.
Kann mir jemand aus diesem Dilemma helfen?
ich habe eine Frage zur Erstellung von hashCode() Methoden.
Michael Inden behauptet in "Der Weg zum Java-Profi", dass eine hashCode() Methode nur die unveränderlichen Felder eines Objektes in die Berechnung mit einbeziehen darf. Die Argumentation klingt für mich schlüssig:
Wenn man auch veränderliche Felder mit einbezieht, dann findet man dieses Objekt in einer HashMap nicht wieder, sobald sich eines dieser Felder ändert.
Joshua Bloch hingegen schreibt in "Effective Java", dass alle Felder, die bei dem Vergleich in equals() relevant sind mit einbezogen werden müssen. Auch hierfür finde ich zumindest ein logisches Argument:
Wie soll ich ansonsten einen Hash für eine Klasse berechnen, die ausschließlich veränderbare Felder besitzt? Da könnte ich ansonsten nur eine Konstante zurückgeben, was bekanntlicherweise die schlechteste aller gültigen hashCode() Implementierungen darstellt.
Kann mir jemand aus diesem Dilemma helfen?