1

Javaコードでキーワードを使用するreturnと、呼び出しスタック内の最後の呼び出しコードに実行が戻ります。オブジェクトfooがを呼び出す場合、メソッドbaz.bar()returnキーワードはでbarコードの実行を続行しますfoo

上記のシナリオでを呼び出し、を呼び出すオブジェクトfooがあるとします。とにかくJavaにキーワードなどを使用して、メソッド内のコードが元に戻ることができるようにすることはできますか?foofoofoofoofoofoofoofoobaz.bar()returnbarfoo

(例外をスローせずに)

4

3 に答える 3

2

いいえ、これは不可能です。これは、一度に1レベルずつ、コードで自分で処理する必要があります(例外は同じことを行いますが、もう少し自動化されています)。

ただし、とにかくこれを行うのはおそらく良い考えではありません。まったく触れずに、突然baz.bar()から電話をかける必要があるとします。コールスタックにないに戻ろうとするとどうなるでしょうか。単にNレベル上げたい場合は、変更することを忘れずに、にマージしたり、変更して追加したりした場合に発生する可能性のある問題を想像できますか?quuxfoobarfoofoofoofoofoofoofoofoofoofoobar

例外は、このジョブに適したツールとまったく同じように聞こえます。移動する必要baz.bar()があることを気にせずfoo、何か例外が発生したことを認識し、実行中の処理を中止する必要があります。次にfoo、この例外的な状況が発生する可能性があることを認識し、それを処理します(それが何もしていない場合でも、この場合です)。すべてにthrows句を追加する必要がない場合は、代わりにチェックされていない例外を使用してください。

于 2010-05-04T22:23:46.933 に答える
1

幸い、これはJavaでは不可能です。

たとえば、OSカーネルでコンテキスト切り替えを行う場合など、同様のことが理にかなっているまれなケースがあります。

しかし、アプリケーションプログラムで行うのは絶対に間違っています。

于 2010-05-04T22:24:50.787 に答える
0

私はJavaの大物ではないので、はっきりとは言えませんが、これは安全な方法とは思えず、Javaでサポートされるとは思えません。

これがこのC/C ++だったので、スタックの差出人アドレスを上書きする汚い小さなハックを行うことができました...

于 2010-05-04T22:21:49.070 に答える