使用Javassist编译hello world类时出现问题

使用Javassist编译hello world类时出现问题,java,javassist,Java,Javassist,我正在使用Javassist用main方法编写HelloWorld类。当我编译时,我得到一个错误,如下所示。我不确定main方法中的字符串[]args有什么问题 javassist.CannotCompileException: [source error] syntax error near "ng[] args)" at javassist.CtNewMethod.make(CtNewMethod.java:78) at javassist.CtNewMethod.make(CtNewMet

我正在使用Javassist用main方法编写HelloWorld类。当我编译时,我得到一个错误,如下所示。我不确定main方法中的字符串[]args有什么问题

javassist.CannotCompileException: [source error] syntax error near "ng[] args)"
at javassist.CtNewMethod.make(CtNewMethod.java:78)
at javassist.CtNewMethod.make(CtNewMethod.java:44) 
这是我的密码

 public void createClass() {
    ClassPool cp = ClassPool.getDefault();
    CtClass ct = cp.makeClass("HelloClass");
    try {
        CtMethod m = CtNewMethod.make("public void sayHello() { System.out.println(\"Hello     World\");}",ct);
        ct.addMethod(m);

       String str="public static void main(String[] args)";
        CtMethod n = CtNewMethod.make(str,ct);
        n.setBody("HelloClass a = new HelloClass();a.sayHello();");
        ct.addMethod(n);
        ct.writeFile();

    } catch (CannotCompileException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


public static void main(String[] args) {
     JavaAssistExample inject = new JavaAssistExample();
    inject.createClass();

}
作为各州的javadoc

源代码不仅必须包括方法体,还必须包括整个声明

因此,它必须包含
{}
,如

String str = "public static void main(String[] args){}";
然而,还有两件事会给你带来问题

首先,您没有默认(或无参数)构造函数。加一

ct.addConstructor(CtNewConstructor.defaultConstructor(ct));
第二,方法完全取代了方法体。所以你不能做你正在做的事。如果你想要所有这些电话,你需要把它们放在一起

n.setBody("{HelloClass a = new HelloClass();a.sayHello();}");