使用Java访问父类的每个子类

我必须实现一个逻辑,给定一个子类,我需要访问它的父类和该父类的所有其他子类,如果有的话。 我没有在Java Reflection中找到任何允许我们访问父类的所有子类的API。 有什么办法吗?

例如:

class B extends class A class C extends class A 

现在使用B类,我可以通过调用getSuperClass()来找到超类。 但是,有了父类,即B类和C类,有没有办法找到所有的子类?

如果这不是家庭作业(可能不允许第三方图书馆),我会建议谷歌思考 ‘ Reflections#getSubTypesOf()

 Set> subTypes = reflections.getSubTypesOf(A.class); 

您可以通过自己扫描类路径来自己做更少或更多,从ClassLoader#getResources()开始,其中您传递""作为名称。

你是对的:没有直接的API。 我猜你可以扫描所有加载的类,看看它们是否是给定类的子类。

一个问题:你只能找到已经加载的类。 这些方法都不会找到尚未加载的类。

您可以使用:

 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中的所有内容并检查以确保对象是某个类的实例,似乎没有任何方法可以做到这一点。