我已经使用Javassist动态更改函数调用的返回类型,但它不起作用。
我已经在源代码中定义了一个简单的调用:
Boolean getResult(){return true;}
但是在运行时我会动态地将其更改为:
String getResult(){return "true"}
然后我将其称为:
Object o = myobject.getResult();
获取MethodNotFound异常。如果我使用反射,我可以在对象上看到我的新方法,但调用失败,显然是因为它以某种方式绑定到旧的返回类型。
如果我反思地调用新方法(轻微伪代码...):
Method m = myobject.getClass.GetDeclaredMethods().(...find method named GetResult...)
Object o = m.invoke(myObject);
然后一切正常,我可以在没有问题的情况下在被操纵和非被操作的字节代码之间切换,我可以看到O的类型相应地是String或Boolean。
任何想法为什么?