2014-09-03 8 views
0

Всякий раз, когда я создаю новый метод с Javassist помощью этого методаВызывающую впрыскивается метод

public static void addMethod(CtClass targetClass, String code) throws Exception { 
    CtNewMethod.make(code, targetClass); 
    targetClass.toClass(); 
    logger.info("Method Successfully created in " + targetClass.getName()); 
} 

, а затем попытаться вызвать его с

public static void invokeMethod(CtClass targetClass, String methodName, Object...args) throws Exception { 
    Method method = targetClass.getClass().getDeclaredMethod(methodName); 
    method.invoke(targetClass, args); 
} 

я получаю исключение «java.lang.NoSuchMethodException: Javassist .CtClassType.testMethod() "

Кто-нибудь знает, что я делаю неправильно?

ответ

0

Ошибка генерируется, потому что с
Method method = targetClass.getClass().getDeclaredMethod(methodName);
вы ссылающегося getClass() на CtClass объекта, но вы должны ссылаться на класс, порожденный targetClass.toClass().
Вы должны перестроить свой код таким образом:

CtClass targetClass = new CtClass(); 
addMethod(targetClass, method1Code); 
addMethod(targetClass, method2Code); 
Class<?> k = targetClass.toClass(); 
invokeMethod(k, ...); 

и переписать

  1. addMethod() удаления targetClass.toClass()
  2. Изменения invokeMethod() «s первых паров со стандартным java.lang.Class
Смежные вопросы