Instanceof と Class.isAssignableFrom(...)
Java でクラスの関係を決定するための最良のアプローチを評価するとき、プログラマーはよく遭遇する問題に直面します。 instanceof 演算子を使用するか Class.isAssignableFrom(...) を使用するかの決定method.
Instanceof と Null Handling
2 つのアプローチの主な違いは、Null 値の処理にあります。 a が null の場合、instanceof B は false を返しますが、B.class.isAssignableFrom(a.getClass()) は NullPointerException をスローします。
動的クラス関係
もう 1 つの違いこれは、動的なクラス関係を扱うときに発生します。 instanceof はコンパイル時に B のクラスを知っている必要があるため、実行時にクラスが動的に変更される可能性があるシナリオでは柔軟性が制限されます。一方、B.class.isAssignableFrom(a.getClass()) は動的であり、結果に影響を与えることなく実行時にクラスを割り当てたり変更したりできます。
Example
この違いを説明するために、次のコードを考えてみましょう:
class A { } class B extends A { } Object a = new A(); if (a instanceof B) { // a is guaranteed to be an instance of B } if (B.class.isAssignableFrom(a.getClass())) { // a is either an instance of B or assigns a class that extends B }
この例では、instanceof チェックは false を返します。 a は B のインスタンスではないため、A は B のスーパークラスであるため、Class.isAssignableFrom(...) チェックは true を返します。
結論
instanceof と Class.isAssignableFrom(...) のどちらを選択するかは、アプリケーションの特定の要件によって異なります。クラスの関係が静的でコンパイル時に既知であるシナリオの場合、instanceof はより簡潔で効率的なオプションを提供します。動的なクラス関係と null 値を処理できる機能については、Class.isAssignableFrom(...) により柔軟性が高まります。
以上がInstanceof と Class.isAssignableFrom(): Java クラスの関係チェックにはどちらの方法を選択する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。