我已经创建了一个空类SimpleClass
。如何在运行时此类中生成一些代码,然后重新编译该类以使用该代码?
public class SimpleClass {}
我找到了使用自定义ClassLoader和
javax.tools
API生成包含其内容的整个类的解决方案。但是现有课程有吗?
public class SimpleClass {
//Generated code in runtime
public void method() {
System.out.println("Generated method");
}
}
最佳答案
您可以在加载类之前注册Java代理来操作类,以包含所需的方法。为此,您需要编译其他jar,在其中注册ClassFileTransformer
可以在其中更改类文件。 Javadoc for the instrument
package概述了操作方法。
加载类后,大多数JVM实现都不允许您添加新方法。