.equals() の実装では getClass() よりも instanceof を優先する
Eclipse で .equals() メソッドを生成すると、開発者には次のものが表示されます。オブジェクトタイプを比較するために「getClass()」を使用するか「instanceof」を使用するかを選択します。 Eclipse はデフォルトで「getClass()」を使用しますが、一般的には代わりに「instanceof」を選択することをお勧めします。 >リスコフ置換原則の遵守:
"getClass()" の使用オブジェクトの同等性を、まったく同じクラスのオブジェクトに制限します。これは、サブクラスはあらゆる点でスーパークラスと置換可能であるべきであるというリスコフ置換原則に違反します。その結果、「getClass()」を使用すると、異なるクラスの同じ論理型のオブジェクトを比較するときに予期しない動作が発生する可能性があります。拡張性の向上:
「instanceof」を使用すると、. equals() メソッドは、異なるサブクラスのオブジェクト間の等価性を正しく識別できます。これにより、等価比較に影響を与えることなく新しいサブクラスを導入できるため、コードの拡張性と柔軟性が向上します。「Effective Java」の著者である Josh Bloch は、.equals() 実装で「instanceof」を使用することを提唱しています。彼は、これによりリスコフ置換原則の適切な遵守が保証され、equals メソッドに依存するコレクションでの予期せぬ動作が防止されると主張しています。
このアプローチに対する追加のサポートは、Stack Overflow の回答と 3 番目の回答で見つけることができます。 Bloch の著書「Effective Java」の章。
以上がJava の `.equals()` メソッドで `instanceof` または `getClass()` を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。