如何确定类是否在Java中扩展另一个类?

在Java中,我该如何确定类扩展了哪些类?

public class A{ } public class B extends A{ } public class C extends A{ } public class D{ } public class E extends B{ } public class doSomething{ public void myFunc(Class cls){ //need to check that cls is a class which extends A //ie B, C and E but not A or D } } 

cls.getSuperClass()做我需要的吗?

对于EgetSuperClass()方法会失败,因为它的直接超类不是A ,而是B 而是使用Class#isAssignableFrom()

 public void myFunc(Class cls){ //need to check that cls is a class which extends A //ie B, C and E but not A or D if (cls != A.class && A.class.isAssignableFrom(cls)) { // ... } } 

您应该尝试避免类型检查,而是在B,C和E中实现执行所需操作的函数,使A和D版本不执行任何操作,然后在doSomething类中调用该函数。

如果你进行类型检查它不是很容易维护,因为当你添加新类时,你需要更改条件逻辑。

这个问题是类和覆盖是有阻止的。

是的, Class.getSuperclass()正是您所需要的。

 Class c = obj.getClass(); System.out.println(c.getSuperclass() == Some.class); 

如果要进行编译时检查,可以使用generics(Java 5及更高版本):

 public void myFunc(Class cls) { } 

传入任何不从Ainheritance的类会生成编译时错误。