【问题标题】:Javassist - addMethod that returns an Object[][]Javassist - addMethod 返回一个 Object[][]
【发布时间】: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


    【解决方案1】:

    好吧,只需将Object[][].class.getName() 替换为Object[][] 即可解决它...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多