要找到最近的公共(public)父类(super class),给定两个非接口(interface)类 a
和 b
,我执行以下操作:
static Class<?> findClosestCommonSuper(final Class<?> a, final Class<?> b) {
Iterator<Class<?>> pathA = pathFromObject(a).iterator();
Iterator<Class<?>> pathB = pathFromObject(b).iterator();
Class<?> res = Object.class;
Class<?> c;
while (pathA.hasNext() && pathB.hasNext()) {
if ((c = pathA.next()) == pathB.next())
res = c;
}
return res;
}
pathFromObject()
返回 List<Class<?>>
代表继承链,从Object.class
开始:
static List<Class<?>> pathFromObject(Class<?> cl) {
List<Class<?>> res = new ArrayList<>();
while (cl != null) {
res.add(cl);
cl = cl.getSuperclass();
}
Collections.reverse(res);
return res;
}
我的问题是:是否存在一些开箱即用的 JDK 解决方案?也许使用类加载器或某些特定功能。或者不需要两次迭代的更好算法。
最佳答案
我认为最简单的实现是这样的
static Class<?> findClosestCommonSuper(Class<?> a, Class<?> b) {
while (!a.isAssignableFrom(b))
a = a.getSuperclass();
return a;
}
关于java - 如何找到两个非接口(interface)类的最近公共(public)父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36509590/