あるJavaクラスが実行時に別のJavaクラスを拡張するかどうかをテストする方法は?


回答:



84

Classが別のものを拡張するかどうかを知りたい場合は、Class#isAssignableFrom(Class)を使用してください。あなたの例では、それは:

if(B.class.isAssignableFrom(A.class)) { ... }

インスタンスが特定のタイプであるかどうかに関心がある場合は、次を使用しますinstanceof

A obj = new A();
if(obj instanceof B) { ... }

これらはtrue、クラス/インスタンスがタイプ階層のメンバーであり、スーパークラス/サブクラスの関係を指示することに限定されていない場合に返されることに注意してください。例えば:

// if A.class extends B.class, and B.class extends C.class
C.class.isAssignableFrom(A.class); // evaluates to true
// ...and...
new A() instanceof C; // evaluates to true

スーパークラスとサブクラスの直接の関係を確認したい場合は、Timも回答提供しています。


2
実際に、それB.class.isAssignableFrom(A.class)、彼はAがBのサブクラスであるかどうかを知りたいので、
メリオン

1
ああ、私はそれを変更します。通常、例はその逆です(BがAを拡張)。
Rob Hruska、2010

だまされました;-p詳細な回答に感謝します。ただし、メリトンは最も明確なIMOであるため、受け入れます。
アルマンド

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.