2017-08-12 114 views
0

我的目標是在運行時創建一個特定的.class文件內的附加方法。Javassist - addMethod返回一個對象[] []

返回Object [] []的方法。

爲此,我找到了一個叫做-javassist的神奇框架,它是一個字節碼修飾符框架,它可以幫助您在運行時修改編譯後的類,以便添加更多代表新方法的字節碼。

成功地創建一個無效的方法,並返回一個字符串,但是,出於某種原因,我無法生成返回一個數組或矩陣的方法等..

到目前爲止iv'e一直在努力尋找創建這種方法的正確方法,並且得到了一個持續的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是:

公共[[Ljava.lang.Object; method1(){return [[Ljava.lang.Object; {{1,2}}; }

可能失敗,因爲假JNI語法

幫助,將不勝感激,感謝先進

〜蒙特

回答

0

好,解決它通過只更換對象[] []。類。 getName()與Object [] []字面上... 希望這可以幫助其他人在未來。