0
我有聲明某一類Groovy腳本。我可以通過javassist在同一個腳本中訪問這個類嗎?我需要爲它創建一個CtClass對象。可以在javassist中訪問Groovy腳本中聲明的類嗎?
這裏是腳本,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
最後的字符串將導致錯誤:
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)
這當然有可能推動這一類的腳本之外,將其編譯爲.class文件,然後輕鬆加載它。我認爲它也可以在腳本中,也就是說,動態重新編譯這個類的字節數組或一個.class文件,然後將其加載在了Javassist。但有可能做到這一點沒有這個類的額外的(再)彙編和使用,我已經可以在普通操作訪問類?