在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
//i.e. B, C and E but not A or D
}
}
会cls.getSuperClass()
做我需要的吗?
答案 0 :(得分:52)
getSuperClass()
的{{1}}方法失败,因为它的直接超类不是E
,而是A
。而是使用Class#isAssignableFrom()
。
B
答案 1 :(得分:8)
你应该尽量避免类型检查,而是在B,C和E中实现你想要的功能,让A和D版本什么都不做,然后在你的doSomething类中调用那个函数。
如果你进行类型检查它不是很易于维护,因为当你添加新类时,你需要更改条件逻辑。
正是这个问题,类和覆盖是有阻止的。
答案 2 :(得分:5)
是的,Class.getSuperclass()
正是您所需要的。
Class<?> c = obj.getClass();
System.out.println(c.getSuperclass() == Some.class);
答案 3 :(得分:1)
如果要进行编译时检查,可以使用泛型(Java 5及更高版本):
public void myFunc(Class<? extends A> cls) {
}
传入任何未从A继承的类会产生编译时错误。