我需要实现一种逻辑,即给定一个子类,我需要访问其父类和该父类的所有其他子类(如果有)。在Java反射中,我没有找到任何允许我们访问父类的所有子类的API。有什么办法吗?
例如:
class B extends class A
class C extends class A
现在使用类B,我可以通过调用
getSuperClass()
找到超类。但是,如果我有父类,即类B和类C,有没有办法找到所有子类?我需要实现一种逻辑,即给定一个子类,我需要访问其父类和该父类的所有其他子类(如果有)。在Java反射中,我没有找到任何允许我们访问父类的所有子类的API。有什么办法吗?
例如:
class B extends class A
class C extends class A
getSuperClass()
找到超类。但是,如果我有父类,即类B和类C,有没有办法找到所有子类?如果这不是作业(在该作业中,第三方库可能不被允许),我会建议使用Google Reflections的 Reflections#getSubTypesOf()
。
Set<Class<? extends A>> subTypes = reflections.getSubTypesOf(A.class);
你可以通过扫描类路径自己实现这个功能,从ClassLoader#getResources()
开始,在其中传递""
作为名称。
您可以使用:
thisObj.getClass().getSuperclass()
thisObj.getClass().getInterfaces()
thisObj.getClass().getGenericInterfaces()
thisObj.getClass().getGenericSuperclass()
我最近编写了一些代码来扫描类的成员,如果这些成员不是基本类型,则也要扫描它们。然而,我没有向上遍历,所以我没有使用上述方法,但我相信它们应该能够满足您的需求。
编辑: 我进行了一个简单的测试,如下:
public class CheckMe {
public CheckMe() {
}
}
public class CheckMeToo extends CheckMe {
public CheckMeToo() {
}
}
// In main
System.out.println( CheckMeToo.class.getSuperclass() );
// Output
class CheckMe
然后就是编写遍历代码的问题。如果它是参数化的,则可能会有些复杂,但仍然相当可行。
编辑:抱歉没有仔细阅读,让我进一步研究一下。
编辑:似乎没有办法在不扫描 CLASSPATH 中的所有内容并检查对象是否是某个类的实例的情况下完成它。