2017-08-12 7 views
0

Mon but est de créer en Runtime une méthode supplémentaire dans un fichier .class spécifique.Javassist - addMethod qui retourne un Object [] []

Une méthode qui renvoie un objet [] []. Pour cela j'ai trouvé un framework étonnant appelé - Javassist, un framework de modificateurs bytecode, qui vous aide à modifier votre classe compilée en runtime afin d'ajouter plus de bytecode qui représente une nouvelle méthode.

réussi à créer une méthode de vide, et une méthode qui renvoie une chaîne mais, pour une raison quelconque, je suis incapable de générer une méthode qui retourne un tableau ou une matrice ..

Jusqu'à présent iv'e eu du mal à trouver la bonne façon de créer une telle méthode, et obtenu une CannotCompileException continue.

code:

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); 
    } 

La toString du procédé ci-dessus est généré:

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

échoue probablement à cause de fausse syntaxe JNI

aide serait appréciée, grâce à avancé

~ Mont

Répondre

0

Eh bien, résolu en remplaçant simplement l'objet [] []. Classe. getName() avec Object [] [] littéralement ... espérons que cela aidera les autres à l'avenir.