小编典典

您可以使用反射找到包中的所有类吗?

all

是否可以找到给定包中的所有类或接口?(快速查看 eg
Package,似乎没有。)


阅读 95

收藏
2022-03-06

共1个答案

小编典典

由于类加载器的动态特性,这是不可能的。类加载器不需要告诉虚拟机它可以提供哪些类,它们只是对类的请求,并且必须返回一个类或抛出一个异常。

但是,如果您编写自己的类加载器,或检查类路径及其 jar,则可以找到这些信息。这将通过文件系统操作,而不是反射。甚至可能有一些库可以帮助您做到这一点。

如果有生成或远程交付的类,您将无法发现这些类。

正常的方法是在某处注册您需要在文件中访问的类,或在不同的类中引用它们。或者只是在命名时使用约定。

附录:反射库将允许您在当前类路径中查找类。它可用于获取包中的所有类:

 Reflections reflections = new Reflections("my.project.prefix");

 Set<Class<? extends Object>> allClasses = 
     reflections.getSubTypesOf(Object.class);
2022-03-06