hashCode neu implementieren

soeni1987

Mitglied
Hallo,

bei meinem Studium soll ich eine Methode hashCode() implementieren welche zu einem Objekt des Typs Object einen Integerwert zurückliefert. Problem dabei ist: das ganze soll generisch sein, also für alle Typen die von Objects erben funktionieren.

Wie kann ich da rangehen? Hat da jemand ne Idee?

Danke schonmal.

PS: Ich weis, dass jedes Object automatisch eine hashCode() Methode hat, ich soll die aber selber implementieren.

PPS: Ich dachte schon an die ID des Objektes aber das würde ja nicht gehen oder? ich meine wenn ich zwei Objekte habe, welche den gleichen Inhalt haben müssen diese doch nicht zwangsläufig die gleiche ID haben oder?
 

soeni1987

Mitglied
Danke, aber irgendwie werde ich aus dem codebeispiel nicht schlau.

Java:
public int hashCode()
		{
			int hash = 7;
			hash = 31 * hash + num;
                        if(null == data){
                              return hash;
                        }else{
			      hash = 31 * hash + data.hashCode();
                              return hash;
                        }
		}
1. Wie kann ich der Methode meinen zu verschlüsselnden Inhalt geben?
2. Sehe ich hier keine individiuelle Behandlung erkennen.

Fals DATA meine Daten sein sollen, warum sollten die denn irgendwann null werden? die Rekursion hat doch keinen Abbruch !
 
Zuletzt bearbeitet von einem Moderator:

Oliver Gierke

Erfahrenes Mitglied
Du schreibst hashCode für eine Klasse, d.h. du sollst einen Hash für das aktuelle Objekt berechnen. das tut man eben im allgemeinen in dem man bestimmte Membervariablen mit in die Berechnung einbezieht, andere evtl. nicht. in deinem Beispiel sind num und data eben Membervariablen der Klasse aus der du den Code hast.

DIE Referenz zum Thema ist übrigens Effective Java von Joshua Bloch. Das relevante Kapitel zu equals und hashCode gibt's hier: http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf

REINHAUN!
 

matdacat

Erfahrenes Mitglied
Genau. Und damit das Ganze generisch funktioniert, holst Du Dir am besten mittels Reflection die Membervariablen bzw. deren Werte.
 
F

Florian089

Anmerkung: der HashCodeBuilder hat auch eine Methode für die Erstellung über Reflection!
HashCodeBuilder.reflectionHashCode(this)
Beachte allerdings die Anmerkung in der JavaDoc.