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 サイトの他の関連記事を参照してください。