是否可以获取类的所有子类?

2022-09-03 00:35:03

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

你好

我想获得一个在运行时在Java中实现接口的类列表,这样我就可以做一个查找服务,而不必对其进行硬编码。有没有一个简单的方法来做到这一点?恐怕不会。


答案 1

简短的答案是否定的。

很长的答案是,子类可以通过多种方式存在,这基本上使得不可能完全找到它们。

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

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

您还必须考虑,如果一个类具有子类,则可以在以后创建新的子类。


答案 2

你应该使用Java ServiceLoader,它是一个内置类。它能够在运行时对所有已知的服务(接口)实现进行迭代。

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