我想从Java程序创建一个.java。当我运行程序时,将自动在我的项目中创建一个Java文件,并在该文件中创建一些运行时(动态)变量。我怎么能这样做?
我知道,我必须使用像Class
和Method
这样的Reflection API,但Class
和Method
中有哪些方法可以做到这一点?
答案 0 :(得分:1)
您无法使用反射API创建新类或方法。它们不是为此而设计的。 (Class
和Method
API用于以动态方式对对象实例执行操作。)
如果您想动态创建新代码,有两种基本方法可以实现:
生成Java源代码,将其写入文件,使用Java编译器将其编译为字节码文件,然后加载字节码。 (有一些标准API用于在正在运行的应用程序的JVM中运行Java编译器。)
使用BCEL或等效文件从头开始构造字节码文件,然后加载字节码。
这两种方法都很棘手并且计算成本很高。 BCEL方法特别棘手,因为您需要了解很多关于JVM才能完成这项工作。
答案 1 :(得分:1)
显然,您希望在运行时创建一个新类并使用它。您可以确保创建一个.java
文件,编译它并从自定义类加载器加载它,但这可能不是最好/最简单的事情。以下是一系列解决方案:
答案 2 :(得分:0)
不,您无法使用Reflection生成新的.java
文件。您可以创建一个新类,并在运行时使用此类,但不能以.java源文件的形式将该类写入文件。
例如,看一下JustAdd框架。该框架解决了这类问题IIRC。
答案 3 :(得分:0)
Java是一种强类型语言(与弱类型语言相对)。简单地说,您需要有一个Class(原型)来创建一个对象实例。你想要做的事情在java(或任何强类型语言)中并不自然。
如果必须在java中使用此功能,则需要使用groovy。 Groovy是一种可以在Java JVM中运行的动态语言。你需要在groovy中检查Expandos。(当然它仍然不会创建.java文件)。