Я пытаюсь динамически генерировать классы в своем приложении и сталкивался с этим ограничением/ошибкой? с джавассистом.javassist: невозможно обработать тело метода с параметризованными картами/списками
Кажется, javassist не может разобрать тело источника, если у него есть Карты/Список с параметризованными типами.
например:
public static void main(String[] args) throws Exception
{
ClassPool pool = ClassPool.getDefault();
CtClass evalClass = pool.makeClass("Eval");
evalClass.addMethod(
CtNewMethod.make("public void test() { java.util.Map<java.lang.String, java.lang.String> tmp=null; }", evalClass));
Class clazz = evalClass.toClass();
Object obj = clazz.newInstance();
Class[] formalParams = new Class[] { };
Method meth = clazz.getDeclaredMethod("test", formalParams);
Object[] actualParams = new Object[] { };
meth.invoke(obj, actualParams);
}
Это даст ошибку
Исключение в потоке "главный" javassist.CannotCompileException: [источник ошибка]; отсутствует в javassist.CtNewMethod.make (CtNewMethod.java:78) в javassist.CtNewMethod.make (CtNewMethod.java:44)
, но когда я изменить тело
public void test() { java.util.Map tmp=null; }
Он работает нормально. То же самое относится к «списку».
Любые советы? Это ограничение или ошибка?
Кажется, javassist поддерживает только синтаксис Java 1.4. –