2016-06-11 3 views
0

私は等号をオーバーライドするが、何のオーバーロードについては私もhasCode毎回をオーバーライドする必要があることを知っていますか?私はまだhashCodeをオーバーライドする必要がありますか?もし私がJavaでhaschodeをオーバーライドしなければならないのですか?

サイドノート:私は最初の場所で等しいが、私はまだ私はそれをオーバーロードすることを選択したい場合、私は何をすべきかを知りたいのですが、私はオーバーロードを避ける必要があることを読んだ質問を投稿する前に。

+3

過負荷 'equals'?あなたは*オーバーライド*を意味しましたか?あなたのユースケースはなんですか?あなたはそれをオーバーロードした場合、それは非常に異なる意味を持っている(すなわち、もはや 'Object.equals'をオーバーライドしていない、あなたのオーバーロードの方法、またhttp://stackoverflow.com/questions/12787947/overriding-object-equals-vs-見ますオーバーロード - それ)。 – Tunaki

+0

ミスドルの質問、申し訳ありませんが、間違った重複であったとして再オープンしました。 –

+0

@ Tunaki私は本当に等しくオーバーロードしようとしていましたが、新しいメソッドを定義していることは分かっていますが、まだオーバーライドする必要があるかどうかはわかりませんでした。 Object Iの1つは新しいhashCodeを再定義する必要があります。あなたのリンクは非常によく説明されています。オーバーロードしないようにしてください。オーバーロードが失敗した場合(コレクションで)、ありがとうございます+1 –

答えて

2

ませハッシュベースのコレクションは、今までに、過負荷状態のequals()メソッドを使用します。それはあなたの方法であり、あなたはそれが何をすべきかを決める。したがって契約は完全にあなたのものです。

しかし、私はあなたがあなたの質問に言ったことを繰り返すだろう:あなたは、最初の場所でのequals()をオーバーロードべきではありません。そうした場合、ほとんどの混乱を避けるために、少なくとも実際のequals(Object)メソッドと一貫性を持たせる必要があります。 equals()と一貫している必要があるので、equals(Object)をオーバーライドする必要があり、hashCode()もオーバーライドする必要があります。

関連する問題