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