如何确定类是否在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()
做我需要的吗?
对于E
, getSuperClass()
方法会失败,因为它的直接超类不是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 extends A> cls) { }
传入任何不从Ainheritance的类会生成编译时错误。