当前位置: 首页 > 面试题库 >

Java-你能用反射找到包中的所有类吗?

宇文智敏
2023-03-14
问题内容

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


问题答案:

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

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

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

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

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

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

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


 类似资料:
  • 问题内容: 你可以使用java反射找到包中的所有类吗? 问题答案: 由于类装载机的动态特性,这是不可能的。类加载器不需要告诉VM它可以提供哪些类,而是它们只是对类的处理请求,而必须返回一个类或引发异常。 但是,如果你编写自己的类加载器,或检查类路径及其jar,则可以找到此信息。但这将通过文件系统操作,而不是通过反射。甚至可能有一些库可以帮助你做到这一点。 如果有一些生成或远程交付的类,你将无法发现

  • 问题内容: 嗨,我是java反射域的新手,所以任何人都可以在这种问题情况下指导我。 我有一个名为 “ SomClass.java”* 的 类 ,它 导入了一个 名为 “ SomPackage.RefClass” 的包以及一些其他的Java库,例如java.lang ..等。 * 现在,我希望通过反思来了解在一类中定义的所有导入。 我只是想知道使用反射在类中定义的所有导入的列表。 我已经看到了问题发

  • 问题内容: 如何去尝试找到Java中给定类的所有子类(或给定接口的所有实现者)?到目前为止,我有一种方法可以执行此操作,但是我发现它效率很低(至少可以这样说)。方法是: 获取类路径上存在的所有类名称的列表 加载每个类并测试以查看它是否是所需类或接口的子类或实现者 在Eclipse中,有一个很好的功能,称为类型层次结构(Type Hierarchy),可以很有效地显示它。如何进行编程? 问题答案:

  • 问题内容: 使用反射而不是调用类构造函数来创建对象是否会导致任何显着的性能差异? 问题答案: 由于反射涉及动态解析的类型,因此无法执行某些Java虚拟机优化。因此,反射操作的性能要比非反射操作慢,因此应避免在对性能敏感的应用程序中经常调用的代码段中。 这是一个简单的测试,我在运行Sun JRE 6u10的计算机上用5分钟的时间破解了它: 结果如下: 请记住,查找和实例化是一起完成的,在某些情况下,

  • 问题内容: 我想知道是否有一种方法可以获取java中某个类的所有私有字段及其类型。 例如,假设我有一堂课 现在,我想获得的所有私有字段(,,类)(如果不知道所有领域前期的名称),并检查它们的类型。 问题答案: 有可能获得与方法的所有字段的。然后,您必须检查每个字段的修饰符以查找私有字段: 请注意,这不会返回继承的字段。 最终,您可以使用Field.getType()方法获得字段的类型。

  • 现在,我想获取类的所有私有字段(、、)(事先不知道所有字段的名称)并检查它们的类型。