【发布时间】:2012-02-25 21:21:21
【问题描述】:
Reflection 用于加载 Java 类并在运行中对其进行操作。但是我遇到了一个奇怪的问题,问我如何通过 Reflection 动态创建 Java 类。我的意思是,在我们想要创建它们之前,这些类没有被编译或有源代码。真的有可能吗?有什么例子吗?
【问题讨论】:
标签: java reflection dynamic
Reflection 用于加载 Java 类并在运行中对其进行操作。但是我遇到了一个奇怪的问题,问我如何通过 Reflection 动态创建 Java 类。我的意思是,在我们想要创建它们之前,这些类没有被编译或有源代码。真的有可能吗?有什么例子吗?
【问题讨论】:
标签: java reflection dynamic
你可以看看Bean Shell's eval method 它可以让你即时执行任何Java代码,而无需将代码编译成字节码。您可以将包含类的所有 Java 代码的字符串传递给它的 eval 方法,然后您将获得动态创建的类的实例。如果您对此感兴趣并希望我举个例子,请告诉我。
【讨论】:
className表示的类没有被编译,在字节码和源代码中都没有它的踪迹。 forName() 会失败,不是吗?
在我看来,您不需要反射,只需要直接从您的代码中调用 JavaCompiler:JavaCompiler。
【讨论】:
你可以试试 ASM ASM
或字节码工程库
用于在运行时操作、创建类
在 .NET 中,我们有 Reflection.Emit(C#) 可以做到这一点 Reflection.Emit
不确定是否有直接的 java 等价物。 你可以在这里看到另一个类似的问题Java equivalent of reflection.emit
【讨论】:
也许 Apache DynaBeans 可以。您可以找到一些有关创建和操作它们的教程,例如。这里:http://www.javaranch.com/journal/2003/07/TouringTheCommonsPart1.html
【讨论】: