0

プログラミング プロジェクトでは、必要な約 20 個のクラスを作成しました。オブジェクトを使用していなくても、オブジェクトから関数equals()をオーバーライドするのは良いプログラミング方法ですか? hashcode()将来必要になった場合に備えて良いかもしれないと考えていますが、確かではありません。

4

7 に答える 7

7

によって提供されるものequalsとは異なる と の実装が必要でない限り、それらをオーバーライドしないでください。JavaDocで説明されているように、バージョン...hashCodeObjectObject

...オブジェクトに対して最も識別可能な等価関係を実装します。つまり、非null参照値xandの場合y、このメソッドは、 andが同じオブジェクトを参照している (値が) であるtrue場合にのみ戻ります。xyx == ytrue

equals(たとえば、そうであるように)に別の意味が必要な場合にのみ、それらをオーバーライドしますString。(そして、一方をオーバーライドする場合、ほとんどの場合、もう一方をオーバーライドする必要があることは非常に正しいです。)

于 2013-04-10T09:17:48.930 に答える
2

必要ないとわかっているものをコーディングしても意味がありません。

OTOH、equals、および hashCode はオーバーライドするのに非常に便利であり、気付かずに簡単に使用している可能性があります。

  • オブジェクトをHashMap
  • 単体テストなどによる、間接的な等価性のテストassertEquals
  • オブジェクトがコレクションに存在するかどうかのテスト

基本的に、オブジェクトに値のセマンティクスがあり、何らかの方法で「データ」として使用され、シングルトンではない場合、上記の理由の 1 つ以上により equals をオーバーライドする必要が生じる可能性があります。

于 2013-04-10T09:21:50.367 に答える
2

あまり。必要な場合にのみ実行してください。

于 2013-04-10T09:17:39.477 に答える
1

いくつかのメソッドをオーバーライドすることをためらうのは、それらが必要な「可能性がある」からです。必要が生じたら、問題を解決してください。これらのメソッドのデフォルトの実装が提供されており、コレクションですぐに使用できます。独自の実装を追加すると問題が発生する場合があります。

于 2013-04-10T09:17:08.487 に答える
1

equals直接呼び出さなくても使用できるメソッドもあります。

本当に必要な場合にのみ実行してください。(クラスに必要なことObject.equals()をしObject.hashcode()ない場合)

于 2013-04-10T09:18:39.450 に答える
1

オーバーライドする必要がequals()ありhashCode()、必要な場合は常にオーバーライドする必要がありますtoString()

于 2013-04-10T09:19:16.043 に答える
0

本当に必要でない限り、オーバーライドしないでください。これらのオブジェクトを のキーとして使用しようとするときは、これらのメソッドをオーバーライドする必要がありますHashMap

于 2013-04-10T09:20:41.100 に答える