a
のサブクラスであるかどうかをテストするにはどうすればよいb
ですか?
Class<?> a = A.class;
Class<?> b = B.class;
a
のサブクラスであるかどうかをテストするにはどうすればよいb
ですか?
Class<?> a = A.class;
Class<?> b = B.class;
何方をお探しですか:
Super.class.isAssignableFrom(Sub.class)
Class
aが別のものを継承しているかどうかを知りたい場合は、 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 も回答を提供しています。
b
から割り当て可能 かどうかを知りたいa
:
b.isAssignableFrom(a);
a
さらに、それが の直接のサブクラスであることを知りたい場合b
:
a.getSuperclass().equals(b);