Ich habe ein Groovy-Skript, das eine bestimmte Klasse deklariert. Kann ich mit javassist im selben Skript auf diese Klasse zugreifen? Ich muss ein CtClass-Objekt dafür erstellen. HierKann auf eine in Groovy-Skript deklarierte Klasse in javassist zugegriffen werden?
ist ein Beispiel für das Skript, test.groovy:
import javassist.*;
public class TestClass {
public String testMethod(String x) {
return x + ".";
}
}
// I can use TestClass now for ordinary operations
TestClass obj = new TestClass();
println(obj.testMethod("a"));
ClassPool pool = ClassPool.getDefault(); // ?
CtClass cc = pool.getCtClass("TestClass"); // this doesn't work
Die letzte Zeichenfolge einen Fehler verursacht:
Caught: javassist.NotFoundException: TestClass
javassist.NotFoundException: TestClass
at javassist.ClassPool.get(ClassPool.java:450)
at javassist.ClassPool.getCtClass(ClassPool.java:515)
at javassist.ClassPool$getCtClass$0.call(Unknown Source)
at test.run(test.groovy:14)
Es ist natürlich möglich, diese Klasse außerhalb des Skripts zu bewegen und kompilieren Sie es in eine .class-Datei und dann ist es einfach, es zu laden. Ich denke, es ist auch im Skript möglich, diese Klasse zum Beispiel dynamisch zu einem Byte-Array oder einer .class-Datei zu kompilieren und dann in javassist zu laden. Aber ist es möglich, dies ohne zusätzliche (erneute) Kompilierung dieser Klasse zu tun und die Klasse zu verwenden, auf die ich bereits im normalen Betrieb zugreifen kann?