web-dev-qa-db-ja.com

1つのJavaクラスが実行時に別のクラスを拡張するかどうかをテストするにはどうすればよいですか?

abのサブクラスであるかどうかをテストするにはどうすればよいですか?

Class<?> a = A.class;
Class<?> b = B.class;
123
Armand

何方をお探しですか:

Super.class.isAssignableFrom(Sub.class)
239
meriton

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が回答を提供しています も同様です。

79
Rob Hruska

b割り当て可能aかどうかを知りたい場合:

b.isAssignableFrom(a);

さらに、abの直接のサブクラスであることを知りたい場合:

a.getSuperclass().equals(b);
38
Tim Stone