次のサンプル コードについて考えてみましょう。
...
try {
stm1
stm2
stm3
} catch(){
...
}
...
コードを実行すると、try ブロック内で例外が発生したとします。実行フローは catch ブロックに入ります。
ここで、try ブロックのバイトコードを (おそらく ASM を使用して) コピーし、バイトコードにいくつかの変更を適用し (たとえば、stm2 を stm4 に置き換える)、catch ブロック内で新しいバイトコードを実行します。
これは、新しいバイトコードをコンパイルまたはロードせずに、インタープリター言語のように実行するだけで可能ですか?
ありがとうございました!
アップデート
アプリオリに適切なコードを記述できることを知っています。問題は理由ではなく、それを行う方法と可能かどうかです。
新しい try 本体を動的に計算する必要があり、同じオブジェクト内で新しいコードを実行する必要があるとします (ローカル変数とクラス変数のため)。