【问题标题】:How to load an arbitrary java .class file from the filesystem and reflect on it?如何从文件系统加载任意 java .class 文件并对其进行反思?
【发布时间】:2011-03-07 10:15:41
【问题描述】:

我想制作一个命令行实用程序,它可以根据外部类文件的反射执行一些操作。我会传入 .class 文件或源文件(可能是通配符)的路径。在执行过程中的某个时刻,我需要获取每个类的 Class 对象,而不是事先知道它们的包名。这样做需要什么?我可以看什么开始?我还可以访问类的源文件。

这是在 java 1.6 中。

另外,使用 java 编译器 API 从源中获取类对象会更容易吗?

【问题讨论】:

    标签: java reflection code-generation classloader introspection


    【解决方案1】:

    您将需要创建一个ClassLoader 并使用defineClass 从您已阅读的文件中创建一个ClassAdd dynamic Java code to your application 读起来很有趣,它甚至描述了源代码的编译。

    【讨论】:

    • “创建”是指实例化还是子类化?
    • defineClass 将在 JVM 中加载类文件并返回代表它的 Class。然后,您可以使用反射 API 创建该类的实例。
    • 如果您需要使用现有的类加载器,您可以使用反射在您选择的任何类加载器上调用 defineClass()。
    【解决方案2】:

    如果您不知道包的名称,您可以通过使用适当的库(例如 ObjectWeb 的 ASM)读取文件来找到它。事实上,如果您只是想找出有关类文件的信息,那么您可能根本不想使用反射。

    【讨论】:

      猜你喜欢
      • 2011-03-19
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      相关资源
      最近更新 更多