Java の 2 つのクラスを比較して判断する場合一方が他方のインスタンスである場合、instanceof と Class.isAssignableFrom(...) の 2 つのオプションがあります。どちらのメソッドも同様の機能を提供しますが、特定の点で異なります。
instanceof 演算子は、オブジェクトが特定のクラスのインスタンスであるか、またはそのクラスのインスタンスであるかを確認します。サブクラス。コンパイル時に静的チェックを実行し、その時点で指定されたクラスが認識されていることを確認します。構文は簡単です:
if (a instanceof B) { // ... }
isAssignableFrom() メソッドは、指定されたクラスまたはいずれかのクラスであるかどうかを判断します。そのサブクラスは、特定のオブジェクトのクラスと互換性があります。これにより動的チェックが可能になり、クラスが実行時にのみ認識される場合に便利です。構文は次のとおりです。
if (B.class.isAssignableFrom(a.getClass())) { // ... }
主な違いは、instanceof では指定されたクラス B がコンパイル時に認識される必要があるという事実にあります。 isAssignableFrom() はそうではありません。これは、動的クラスや未知のクラスを扱う場合に大きな利点となります。
次のシナリオを考えてみましょう。
Object a = new MyObject(); if (a instanceof UnknownClass) { // Compilation error // ... }
この例では、コンパイル時に UnknownClass が不明なため、instanceof を使用するとコンパイル エラーが発生します。ただし、isAssignableFrom() を使用すると、実行時チェックが可能になります。
if (UnknownClass.class.isAssignableFrom(a.getClass())) { // No error // ... }
最終的には、instanceof と Class.isAssignableFrom(... ) は、コードの特定の要件によって異なります。コンパイル時に静的チェックを実行する必要がある場合、instanceof は便利で効率的な方法を提供します。ただし、動的なクラス関係を処理する必要がある場合、またはコンパイル時に不明なクラスを操作する必要がある場合は、isAssignableFrom() を使用すると柔軟性が高まります。
以上が「instanceof」と「Class.isAssignableFrom(...)」: Java クラスの比較にはどちらの方法を選択する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。