Использование Javassist для предотвращения перегрузки в зависимости от типа возврата - PullRequest
2 голосов
/ 02 августа 2011

Я использовал 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.

Есть идеи, почему?

...