Подумайте об этом примере кода:
...
try {
stm1
stm2
stm3
} catch(){
...
}
...
Предположим, что для запуска кода и внутри блока try возникает исключение. Поток выполнения переходит в блок захвата.
Здесь я хотел бы скопировать байт-код блока try (возможно, используя ASM), применить некоторые модификации к байт-коду (например, заменить stm2 на stm4) и выполнить новый фрагмент байт-кода в блоке catch.
Возможно ли это без компиляции или загрузки нового байт-кода, а просто выполнения его как интерпретируемого языка?
Спасибо!
UPDATE
Я знаю, что могу написать правильный кусок кода априори. Вопрос не в том, почему, а в том, как это сделать и если это возможно.
Предположим, что мне нужно динамически вычислить новое тело попытки и мне нужно выполнить новый код в том же объекте (из-за локальных переменных и переменных класса.)