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

最佳答案

由于类装载机的动态特性,这是不可能的。类加载器不需要告诉VM它可以提供哪些类,而是它们只是对类的处理请求,而必须返回一个类或引发异常。

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

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

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

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

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

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

10-08 03:06