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 のいずれかであることがわかります。
理由はありますか?