.equals() メソッドで 'getClass()' または 'instanceof' を使用する必要がありますか?
.equals() を生成するときEclipse を使用したメソッドの場合、比較に「instanceof」または「.getClass()」を使用するオプションがあります。 種類。デフォルトでは、Eclipse は '.getClass()' を使用するため、多くのプログラマは 'instanceof' に切り替えるべきかどうか疑問に思っています。
何が違うのですか?
.getClass() は 2 つのオブジェクトの実行時の型を直接比較しますが、 instanceof は、オブジェクトが特定のクラスまたはインターフェイスのインスタンスであるかどうかを確認します。例:
if (getClass() != obj.getClass()) // Using getClass() if (!(obj instanceof MyClass)) // Using instanceof
どれを使用するべきですか?
Java 専門家の Josh Bloch 氏によると、制限がないため「instanceof」が推奨されるアプローチです。同じランタイム型と同等です。これは、同じ重要な側面を共有するオブジェクトの同等性に影響を与えることなく、クラスを拡張してメソッドを追加できることを意味します。
さらに、これは、サブクラスを使用できる必要があるというリスコフ置換原則とも一致しています。コードを壊さずにスーパークラスの代わりに使用できます。 「.getClass()」を使用すると、この原則に違反し、HashTable などのコレクションで予期しない動作が発生します。
要約すると、「instanceof」は柔軟性が高く、.equals() メソッドには推奨されます。 「instanceof」を使用して「if (obj == null)」チェックを削除することもできますが、一般的には明確さと完全性のために保持しておくことをお勧めします。
以上が「getClass()」と「equals()」の「instanceof」: どちらを使用するべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。