如何在运行时测试一个 Java 类是否扩展了另一个?

如何测试 a是否是 b的子类?

Class<?> a = A.class;
Class<?> b = B.class;
102856 次浏览

你是否在寻找:

Super.class.isAssignableFrom(Sub.class)

如果你想知道一个 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 已经给出了答案

你想知道如果 b 是可转让的 a:

b.isAssignableFrom(a);

另外,如果你想知道 ab的一个直接子类:

a.getSuperclass().equals(b);