【发布时间】:2022-03-11 05:44:49
【问题描述】:
我的目标是在运行时在特定的 .class 文件中创建一个附加方法。
一个返回Object[][]的方法。
为此,我发现了一个名为 Javassist 的惊人框架,它是一个字节码修改器框架,它可以帮助您在运行时修改已编译的类,以便添加更多代表新方法的字节码。
设法创建了一个void 方法和一个返回字符串的方法,但由于某种原因,我无法生成一个返回数组或矩阵的方法。
到目前为止,我一直在努力寻找创建这种方法的正确方法,并得到了一个连续的CannotCompileException。
代码:
private static CtMethod generateMethod1(CtClass declaringClass)
throws CannotCompileException {
StringBuffer sb = new StringBuffer();
sb.append("public ").append(Object[][].class.getName()).append(" ").append("method1").append("(){")
.append("return new").append(Object[][].class.getName()).append("{{ 1,2 }}").append("; }");
System.out.println(sb.toString());
return CtMethod.make(sb.toString(), declaringClass);
}
上面生成的方法的toString是:
public [[Ljava.lang.Object; method1(){return [[Ljava.lang.Object;{{ 1,2 }}; }
可能由于错误的 jni 语法而失败。
【问题讨论】:
标签: java-native-interface javassist