2016-06-11 15 views
0

Ich weiß, dass ich auch hasCode überschreiben sollte, jedes Mal, wenn ich gleich überschreibe, aber was ist mit Überladung? Sollte ich HashCode noch überschreiben?Wenn ich gleichviel überbelaste, sollte ich noch Hashcode in Java überschreiben?

Randnotiz: Bevor ich die Frage stelle, die ich gelesen habe, sollte ich vermeiden, gleich zu überladen, aber ich würde immer noch gerne wissen, was ich tun soll, wenn ich es überladen würde.

+3

Überladung 'equals'? Meinst du * override *? Was genau ist dein Anwendungsfall? Wenn Sie es überladen, hat es eine ganz andere Bedeutung (dh Ihre Überladungsmethode überschreibt 'Object.equals' nicht mehr, siehe auch http://stackoverflow.com/questions/12787947/overriding-object-equals-vs- Überladen-es). – Tunaki

+0

Misread Frage, sorry, wieder geöffnet, da das das falsche Duplikat war. –

+0

@Tunaki ich beabsichtigte in der Tat Überladung gleich und ich weiß, dass es eine neue Methode definiert, aber immer noch wusste ich nicht, ob ich HashCode überschreiben sollte: Ich dachte, weil ich ein neues Gleichgestelltes schuf, das ich theoretisch immer statt verwendet hätte der in Objekt I hätte auch einen neuen HashCode neu definieren müssen. Ihr Link erklärt sehr gut, warum nicht überladen Gleichaltrigen und wenn Überladung könnte fehlschlagen (mit Sammlungen) also danke +1 –

Antwort

2

Keine Hash-basierte Sammlung wird jemals Ihre überladene equals() -Methode verwenden. Es ist Ihre Methode, und Sie entscheiden, was es tun soll. Der Vertrag gehört also ganz Ihnen.

Aber ich wiederhole, was Sie in Ihrer Frage sagten: Sie sollten equals() an erster Stelle nicht überladen. Wenn Sie dies tun, sollten Sie es mindestens mit der tatsächlichen Methode equals (Object) konsistent machen, um die meisten Verwirrungen zu vermeiden. Und da es mit equals() konsistent sein sollte, müssen Sie equals (Object) überschreiben und damit auch hashCode() überschreiben.