2017-08-12 6 views
0

Mein Ziel ist es, in Runtime eine zusätzliche Methode in einer bestimmten .class-Datei zu erstellen.Javassist - addMethod, das ein Objekt zurückgibt [] []

Eine Methode, die ein Objekt [] [] zurückgibt.

Dafür fand ich ein erstaunliches Framework namens - Javassist, ein Bytecode-Modifikator-Framework, das Ihnen hilft, Ihre kompilierte Klasse in Laufzeit zu ändern, um mehr Bytecode hinzuzufügen, der eine neue Methode darstellt.

Managed einen void-Methode zu erstellen, und eine Methode, die einen String, aber aus irgendeinem Grund gibt, ich bin nicht in der Lage, ein Verfahren zu erzeugen, die ein Array oder eine Matrix zurückgibt ..

Bisher iv'e habe gekämpft, um den richtigen Weg zu finden, solche Methode zu erstellen, und bekam eine kontinuierliche CannotCompileException.

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

Das toString der erzeugten Methode oben ist:

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

nicht Wahrscheinlich wegen falscher jni Syntax

Hilfe würde geschätzt, Dank fortschrittlicher

~ Mont

Antwort

0

Nun, es gelöst, indem nur die Object [] ersetzen []. Klasse. getName() mit Object [] [] wörtlich ... hoffe das hilft anderen in der Zukunft.

Verwandte Themen