.equals() を実装する場合の getClass() とinstanceof の選択
Java で .equals() メソッドを実装する場合、重要な手順の 1 つは、比較対象の 2 つのオブジェクトのタイプを比較することです。 Eclipse には、これを行うための 2 つのオプション、getClass() または instanceof を使用するオプションが用意されています。デフォルトでは、Eclipse は getClass() の使用を推奨しますが、それぞれのアプローチの背後にある理由を調べることが重要です。
getClass() アプローチ
このアプローチでは、メソッドは以下をチェックします。 getClass() の戻り値が 2 つのオブジェクトの値と等しい場合。これにより、オブジェクトが同じクラスであることが保証されますが、継承を扱う際に制限が生じます。一方のオブジェクトが他方のサブクラスである場合、それらは同じ本質的なプロパティを持っていたとしても、同等とは見なされません。これにより、スーパークラス インスタンスを使用してサブクラスを取得できない HashTable などのコレクションで予期しない動作が発生する可能性があります。
instanceof アプローチ
Josh Bloch が好む、instanceof アプローチでは、以下を使用します。 instanceof 演算子を使用して、最初のオブジェクトが同じクラスのインスタンスであるか、2 番目のオブジェクトのクラスのサブクラスであるかを確認します。このアプローチはリスコフ置換原則と一致しており、サブクラスのオブジェクトをスーパークラスのオブジェクトと同等のものとして扱うことができます。また、null 以外のオブジェクトはすべて instanceof テストに合格するため、null オブジェクトの冗長なチェックを回避することもできます。
結論
getClass() アプローチ単純な場合にはこれで十分な場合もありますが、柔軟性とオブジェクト指向の設計原則に準拠しているため、一般にインスタンス オブ アプローチが好まれます。これにより、オブジェクトが正確な型ではなく動作に基づいて同等であるとみなされるようになり、継承シナリオでの予期しない動作が回避されます。
以上が「getClass() と Java の .equals() の instanceof: どちらのアプローチが最適ですか?」の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。