我想知道是否有一种简单而优雅的方法来确定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
。所有可用于此额外见解的类都派生自一个基类,也可用于洞察。
答案 0 :(得分:2)
答案 1 :(得分:1)
虽然我不知道为什么你想知道一个类是否从另一个继承,但你的解决方案看起来很好。此外,isAssignableFrom
不适合这项工作,因为它考虑了接口的实现。如果类A
实现了接口B
,B
可以从A
分配,但A
不会从B
继承。
您的方法存在一个小问题,将同一个类传递给两个参数都返回true,这是不正确的,因为同一个类不能从自身继承。您可以通过检查两个参数是否相等来解决这个问题。
您可能想要考虑的另一件事是超级接口。