如何获得Java类的所有子类?

时间:2019-02-26 10:25:23

标签: java class reflection

所以我有一个类A,并且有多个从类A扩展的类。我创建了该类的实例,是否有办法获取所有其他扩展A的类?

类似的东西:

A a = new A();
a.getAllSubclasses();

我要这样做的唯一方法是扫描整个项目中的所有类并将它们存储在列表中,然后手动检查每个类是否从具有instanceOf的A扩展。

List<Class> classList;
classList.each{
    if(it instanceOf a)
        //do stuff
}

这似乎是不好的,特别是对于具有数百个类的大型项目。

2 个答案:

答案 0 :(得分:1)

简单的答案是:是的,了解类X的“可访问”子类的唯一方法是扫描所有类的 complete 类路径,并针对每个类检查是否它是X的子类。

并注意:当然,会告诉您该类路径中的子类。

换句话说:始终存在范围限制。如果您有两个不同的项目,那么在两个项目中也可以都有X的一些子类,因此您必须扫描这两个“上下文”以了解它们。

答案 1 :(得分:0)

有一个简单的库,称为org.reflections提供有关子类的信息。使用此库,您需要调用reflections.getSubTypesOf(ClassName))。 在此处GitHub Code

检查各自的代码