【问题标题】:How to create Java classes Dynamically by Java Reflection?如何通过 Java 反射动态创建 Java 类?
【发布时间】:2012-02-25 21:21:21
【问题描述】:

Reflection 用于加载 Java 类并在运行中对其进行操作。但是我遇到了一个奇怪的问题,问我如何通过 Reflection 动态创建 Java 类。我的意思是,在我们想要创建它们之前,这些类没有被编译或有源代码。真的有可能吗?有什么例子吗?

【问题讨论】:

    标签: java reflection dynamic


    【解决方案1】:

    你可以看看Bean Shell's eval method 它可以让你即时执行任何Java代码,而无需将代码编译成字节码。您可以将包含类的所有 Java 代码的字符串传递给它的 eval 方法,然后您将获得动态创建的类的实例。如果您对此感兴趣并希望我举个例子,请告诉我。

    【讨论】:

    • 但是className表示的类没有被编译,在字节码和源代码中都没有它的踪迹。 forName() 会失败,不是吗?
    【解决方案2】:

    在我看来,您不需要反射,只需要直接从您的代码中调用 JavaCompiler:JavaCompiler

    【讨论】:

      【解决方案3】:

      你可以试试 ASM ASM

      或字节码工程库

      Byte code engineering library

      用于在运行时操作、创建类

      在 .NET 中,我们有 Reflection.Emit(C#) 可以做到这一点 Reflection.Emit

      不确定是否有直接的 java 等价物。 你可以在这里看到另一个类似的问题Java equivalent of reflection.emit

      【讨论】:

      • 需要字节码操作。实际上 Javassist 库正是我所需要的。
      【解决方案4】:

      也许 Apache DynaBeans 可以。您可以找到一些有关创建和操作它们的教程,例如。这里:http://www.javaranch.com/journal/2003/07/TouringTheCommonsPart1.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-01
        • 2014-06-19
        • 1970-01-01
        • 1970-01-01
        • 2011-10-30
        • 2011-04-05
        • 2016-10-24
        相关资源
        最近更新 更多