是否有可能获得类的所有子类?

Chr*_*son 17 java reflection runtime

可能重复:
如何在Java中找到给定类的所有子类?

嗨,

我想获得一个在运行时用Java实现接口的类列表,这样我就可以进行查找服务而无需对其进行硬编码.有一个简单的方法吗?我不担心.

cle*_*tus 24

最简洁的答案是不.

很长的答案是子类可以以多种方式存在,这基本上使得无法对它们进行绝对的分类.

你不能在运行时这样做,但是在加载之前你找不到类,你怎么知道它们被加载了?您可以扫描每个JAR和类文件,但这不是确定的.另外还有像URL类加载器这样的东西.

内部类(静态和非静态)是另一种需要考虑的案例.命名的内部类更容易找到.匿名内部类可能更难找到.

您还必须考虑如果一个类有子类,那么可以在以后创建新的子类.


dfa*_*dfa 5

您应该使用内置类的Java ServiceLoader.它能够在运行时通过所有已知的服务(接口)实现进行迭代.

如果由于某种原因你不想要它,你可以使用ClassLoader.getSystemResources()迭代所有资源; 例如,如果您有6倍的文件/META-INF/com.interface,您将获得6次迭代.