0

特定の例外が既にキャッチされていても、スローされたときに通知を受け取る方法があるかどうかを知りたいです。

例外をスローした基礎となるフレームワークによってキャッチされる例外があります。私は、コードを実行するためのトリガー ポイントとして、try-catch の外側 (本質的にそれを囲む) からこの例外を使用しようとしており、それを行う方法を見つけようとしています。

それを行う方法はありますか?

ありがとう!

4

3 に答える 3

4

あなたは文脈を与えなかったので、ここにいくつかの可能性があります:

  • 適切なコンストラクターにブレークポイントを設定し、デバッグ モードで実行する
  • アスペクトを使用します。たとえば、aspectj や spring
  • 拡張機能を例外のコンストラクターに入れます
  • 例外を引き起こすコードの周りに try-catch を配置します

PS: わからない場合は、RuntimeExceptionsチェック済み例外をキャッチするのと同じ方法でキャッチできます。

于 2012-10-01T20:38:29.533 に答える
0

例外がフレームワークによって既にキャッチされている場合、try-catch ブロックで例外をキャッチする方法はありません。

あなたはこれをやろうとしています:

try {
    try {
        throw new Exception();
    } catch(Exception e) {
        e.printStackTrace();
    }
} catch(Exception e) {
    System.out.println("Caught from the outside!");
}

これは失敗し、例外の StackTrace が出力されますが、「Caught from the outside!」印刷されません。これは、途中でスローされた例外がすでにキャッチされている、例外を 2 回キャッチできない、またはエラー処理の目的に反するという事実によるものです。エラーが処理されたら、それについて上位レベルに通知する必要はありません;)

于 2012-10-01T20:38:40.123 に答える
0

私が理解していることから、ソースにアクセスできず、アクセス範囲外で例外がキャッチされて処理され、何かをさせたいですか?

私がすぐに思いつく唯一の解決策は PowerMock です。ライブラリを使用すると、コンストラクターをオーバーライドして、独自に作成したオブジェクトを返すことができます。通常はテストでのみ使用され、他の目的で使用することはお勧めしませんが、独自のコードを追加して、その例外のすべてのインスタンスを元の例外の拡張に置き換えるために使用できます。

于 2012-10-01T20:42:44.180 に答える