如何确定一个类是否继承自另一个类?

时间:2017-07-12 09:44:06

标签: java inheritance reflection

我想知道是否有一种简单而优雅的方法来确定Class对象是否与另一个对象具有继承关系。

我在文档中找到的只是getSuperclass(),它给出了Class对象的超类。我能想到的就是:

public static boolean isInherited(Class child, Class parent) {
    for (Class type = child; type != null; type = type.getSuperclass()) {
        if (type.equals(parent)) {
            return true;
        }
    }
    return false;
}

我错过了什么吗?

修改

背后的原因是,我正在编写一个ReST-Service来检索有关给定对象的一些见解。因此,该类型以String提供,我通过Class检索Class.forName。所有可用于此额外见解的类都派生自一个基类,也可用于洞察。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

虽然我不知道为什么你想知道一个类是否从另一个继承,但你的解决方案看起来很好。此外,isAssignableFrom不适合这项工作,因为它考虑了接口的实现。如果类A实现了接口BB可以从A分配,但A不会从B继承。

您的方法存在一个小问题,将同一个类传递给两个参数都返回true,这是不正确的,因为同一个类不能从自身继承。您可以通过检查两个参数是否相等来解决这个问题。

您可能想要考虑的另一件事是超级接口。