Java のquals() メソッドのオーバーライド: 避けるべき落とし穴
Java では、equals() メソッドはオブジェクトの比較において重要な役割を果たします。 。このメソッドのオーバーライドは、正しく行わないと落とし穴に陥る可能性があります。
一例として、Book パラメーターを受け取るメソッドで equals() をオーバーライドすると予期しない動作が発生するというシナリオを考えてみましょう。これは、Java 固有のquals() メソッドが、Book のような特定の型ではなく、Object パラメータを取るように定義されているためです。
この例で使用されている ArrayList クラスは、オーバーライドされたequals() メソッドを使用して等しいかどうかを判断します。オブジェクト間 (contains() とquals() など)。ただし、オーバーロードされたequals()メソッド(特定の型のパラメータを取るメソッド)では機能しません。
正しいオーバーライドとオーバーロード
このシナリオでは、 public booleanquals(Book other) は、オブジェクトベースのequals()メソッドとは異なるパラメータ型を持つため、オーバーライドではなくオーバーロードです。 Object.
equals() をオーバーライドするためのベスト プラクティス
このような問題を回避するには、equals() をオーバーライドするときに次のベスト プラクティスに従うことをお勧めします。
@Override public boolean equals(Object other){ if (other == null) return false; if (other == this) return true; if (!(other instanceof MyClass)) return false; MyClass otherMyClass = (MyClass)other; ...test other properties here... }
このテンプレートは、null、自己参照、インスタンス タイプの互換性を包括的にチェックし、適切な機能を保証します。
以上がJavaのequals()メソッドのオーバーライドに特別な注意が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。