Я пытаюсь динамически генерировать классы в своем приложении и столкнулся с этим ограничением/ошибкой? с явасистом.
Кажется, javassist не может разобрать исходное тело, если оно имеет карты/список с параметризованными типами.
eg :
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; }
Это работает нормально. То же самое относится и к «Списку».
Какие-нибудь советы? Это ограничение или баг?