我使用 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 。
任何想法为什么?