我已经创建了一个空类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实现都不允许您添加新方法。

07-27 20:23