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

时间:2010-11-04 19:06:50

标签: 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
         //i.e. B, C and E but not A or D
    }
}

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

4 个答案:

答案 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继承的类会产生编译时错误。