ホームページ > Java > &#&チュートリアル > Java の `.equals()` メソッドで `instanceof` または `getClass()` を使用する必要がありますか?

Java の `.equals()` メソッドで `instanceof` または `getClass()` を使用する必要がありますか?

Linda Hamilton
リリース: 2024-11-27 01:23:13
オリジナル
240 人が閲覧しました

Should You Use `instanceof` or `getClass()` in Java's `.equals()` Method?

.equals() の実装では getClass() よりも instanceof を優先する

Eclipse で .equals() メソッドを生成すると、開発者には次のものが表示されます。オブジェクトタイプを比較するために「getClass()」を使用するか「instanceof」を使用するかを選択します。 Eclipse はデフォルトで「getClass()」を使用しますが、一般的には代わりに「instanceof」を選択することをお勧めします。 >リスコフ置換原則の遵守:

"getClass()" の使用オブジェクトの同等性を、まったく同じクラスのオブジェクトに制限します。これは、サブクラスはあらゆる点でスーパークラスと置換可能であるべきであるというリスコフ置換原則に違反します。その結果、「getClass()」を使用すると、異なるクラスの同じ論理型のオブジェクトを比較するときに予期しない動作が発生する可能性があります。

拡張性の向上:

「instanceof」を使用すると、. equals() メソッドは、異なるサブクラスのオブジェクト間の等価性を正しく識別できます。これにより、等価比較に影響を与えることなく新しいサブクラスを導入できるため、コードの拡張性と柔軟性が向上します。
  • Null チェックのベスト プラクティス
  • についてnull チェックを行う場合、「instanceof」を使用する場合は「if (obj == null)」ステートメントを削除することをお勧めします。これは、「instanceof」は「obj」が関連するクラスのインスタンスであることを保証しており、null オブジェクトはどのクラスのインスタンスであってもならないためです。
サポートする引数

「Effective Java」の著者である Josh Bloch は、.equals() 実装で「instanceof」を使用することを提唱しています。彼は、これによりリスコフ置換原則の適切な遵守が保証され、equals メソッドに依存するコレクションでの予期せぬ動作が防止されると主張しています。

このアプローチに対する追加のサポートは、Stack Overflow の回答と 3 番目の回答で見つけることができます。 Bloch の著書「Effective Java」の章。

以上がJava の `.equals()` メソッドで `instanceof` または `getClass()` を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート