ホームページ > Java > &#&チュートリアル > 特定のパラメータ (例: Book`) で `equals()` をオーバーライドすると Java の等価性チェックが機能しないのはなぜですか?

特定のパラメータ (例: Book`) で `equals()` をオーバーライドすると Java の等価性チェックが機能しないのはなぜですか?

Barbara Streisand
リリース: 2024-12-31 22:25:09
オリジナル
1001 人が閲覧しました

Why Does Overriding `equals()` with a Specific Parameter (e.g., `Book`) Break Java's Equality Checks?

Book パラメータで Java の equals() メソッドをオーバーライドすると問題が発生する理由

カスタム等価性チェックの実装には、equals() メソッドのオーバーライドが不可欠ですジャワでは。ただし、標準のquals(Object) メソッドの代わりに Book パラメータを指定したカスタムのquals() メソッドを使用すると、予期しない動作が発生する可能性があります。

equals() メソッドについて理解する

デフォルトでは、Java は Object パラメータを受け取る Object クラスに equals() メソッドを定義します。カスタム クラスでequals()をオーバーライドして特定の型のオブジェクトを比較する場合は、同じシグネチャ、つまりequals(Object)に従う必要があります。

オーバーライドとオーバーロード

オーバーライドは、スーパークラスから継承されたメソッドに新しい実装を提供することとして定義されます。一方、オーバーロードとは、異なるパラメーター型を持つメソッド名を再利用することです。

提供されたコードでは、public booleanquals(Book b) メソッドは、オーバーライドではなくオーバーロードを構成します。これは、元の equals(Object) メソッドと比較して異なるパラメーターの型を使用するためです。

オーバーロードの問題

equals() メソッドをオーバーロードすると、等価性チェックにequals(Object)を使用する標準ライブラリ クラスとの互換性が失われます。たとえば、ArrayList は、要素がリストに存在するかどうかを判断するために、equals(Object) を使用します。

したがって、hasBook() メソッドでオーバーロードされたequals(Book) メソッドを使用すると、contains() が失敗します。 ID のみでインスタンス化された Book オブジェクトを比較する場合。

解決策

解決するにはこの問題では、equals(Object) シグネチャに従って、equals() メソッドを正しくオーバーライドする必要があります。これにより、等価性チェックにequals(Object)に依存する標準ライブラリ クラスとの互換性が確保されます。

以上が特定のパラメータ (例: Book`) で `equals()` をオーバーライドすると Java の等価性チェックが機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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