gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:58:52 25 4
gpt4 key购买 nike

我正在使用 Javassist 编写一个带有 main 方法的 HelloWorld 类。当我编译时,出现如下错误。我不确定 main 方法中的 String[] 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();

}

最佳答案

作为 CtNewMethod 的 javadoc州

The source code must include not only the method body but the whole declaration

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

String str = "public static void main(String[] args){}";

但是,还有两件事会给你带来问题。

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

ct.addConstructor(CtNewConstructor.defaultConstructor(ct));

第二,CtMethod#setBody(..)方法完全取代了方法体。所以你不能做你正在做的事情。如果您想要所有这些调用,则需要将它们放在一起

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

关于java - 使用 Javassist 编译 hello world 类时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com