在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
}
}
Run Code Online (Sandbox Code Playgroud)
会cls.getSuperClass()做我需要的吗?
Bal*_*usC 54
这种getSuperClass()方法会失败,E因为它的直接超类不是A,但是B.而是使用Class#isAssignableFrom().
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
if (cls != A.class && A.class.isAssignableFrom(cls)) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
您应该尝试避免类型检查,而是在B,C和E中实现执行所需操作的函数,使A和D版本不执行任何操作,然后在doSomething类中调用该函数.
如果你进行类型检查它不是很容易维护,因为当你添加新类时,你需要更改条件逻辑.
这个问题是类和覆盖是有阻止的.
是的,Class.getSuperclass()正是您所需要的.
Class<?> c = obj.getClass();
System.out.println(c.getSuperclass() == Some.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22242 次 |
| 最近记录: |