プログラミング プロジェクトでは、必要な約 20 個のクラスを作成しました。オブジェクトを使用していなくても、オブジェクトから関数equals()
をオーバーライドするのは良いプログラミング方法ですか? hashcode()
将来必要になった場合に備えて良いかもしれないと考えていますが、確かではありません。
7 に答える
によって提供されるものequals
とは異なる と の実装が必要でない限り、それらをオーバーライドしないでください。JavaDocで説明されているように、バージョン...hashCode
Object
Object
...オブジェクトに対して最も識別可能な等価関係を実装します。つまり、非
null
参照値x
andの場合y
、このメソッドは、 andが同じオブジェクトを参照している (値が) であるtrue
場合にのみ戻ります。x
y
x == y
true
equals
(たとえば、そうであるように)に別の意味が必要な場合にのみ、それらをオーバーライドしますString
。(そして、一方をオーバーライドする場合、ほとんどの場合、もう一方をオーバーライドする必要があることは非常に正しいです。)
必要ないとわかっているものをコーディングしても意味がありません。
OTOH、equals、および hashCode はオーバーライドするのに非常に便利であり、気付かずに簡単に使用している可能性があります。
- オブジェクトを
HashMap
- 単体テストなどによる、間接的な等価性のテスト
assertEquals
- オブジェクトがコレクションに存在するかどうかのテスト
基本的に、オブジェクトに値のセマンティクスがあり、何らかの方法で「データ」として使用され、シングルトンではない場合、上記の理由の 1 つ以上により equals をオーバーライドする必要が生じる可能性があります。
あまり。必要な場合にのみ実行してください。
いくつかのメソッドをオーバーライドすることをためらうのは、それらが必要な「可能性がある」からです。必要が生じたら、問題を解決してください。これらのメソッドのデフォルトの実装が提供されており、コレクションですぐに使用できます。独自の実装を追加すると問題が発生する場合があります。
equals
直接呼び出さなくても使用できるメソッドもあります。
本当に必要な場合にのみ実行してください。(クラスに必要なことObject.equals()
をしObject.hashcode()
ない場合)
オーバーライドする必要がequals()
ありhashCode()
、必要な場合は常にオーバーライドする必要がありますtoString()
本当に必要でない限り、オーバーライドしないでください。これらのオブジェクトを のキーとして使用しようとするときは、これらのメソッドをオーバーライドする必要がありますHashMap
。