每当我使用此方法使用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 :(得分: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, ...);
并重写
addMethod()
删除targetClass.toClass()
invokeMethod()
java.lang.Class
的第一个参数
醇>