Я использовал 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.
Есть идеи, почему?