У меня есть сценарий Groovy, который объявляет определенный класс. Могу ли я получить доступ к этому классу в том же скрипте через javassist? Мне нужно создать для него объект CtClass.
Вот пример скрипта 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. Но можно ли это сделать без дополнительной (пере)компиляции этого класса и использовать класс, к которому я уже имею доступ в обычных операциях?