2017-08-12 9 views
0

私の目標は、実行時に特定の.classファイル内に追加のメソッドを作成することです。Javassist - Object [] []を返すaddMethod

Object [] []を返すメソッドです。

私は、新しいメソッドを表すバイトコードを追加するために、実行時にコンパイルされたクラスを変更するのに役立つバイトコード修飾子フレームワークのJavassistという素晴らしいフレームワークを発見しました。

は、これまでのところiv'e ..

を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である:

パブリック[Ljava.lang.Object。 method1(){return [[Ljava.lang.Object; {{1,2}}; }

はおそらくによる偽JNI構文に

ヘルプをいただければ幸い失敗し、高度な

で感謝〜モン

答えて

0

まあ、単にオブジェクト[] []。クラスを置き換えることによってそれを解決しました。 Object [] []を使用してgetName()を文字通り... これは将来的に他の人に役立つことを願っています。

関連する問題