2

我使用 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 。

任何想法为什么?

4

0 回答 0