1. ホーム
  2. java

[解決済み] 抑制された例外とは何ですか?

2023-06-17 02:33:27

質問

コメント (by ユーザー soc に対するコメントです。 答え テールコールの最適化に関する質問 は、Java 7 が ARM" の追加(ARM CPU のサポート?)のために "suppressed exceptions" という新しい機能を備えていることに言及しました。

この文脈での "suppressed exception" とは何でしょうか。他のコンテキストでは、抑制された例外とは、捕捉された後に無視される例外 (良い考えであることはほとんどありません) のことですが、これは明らかに異なるものです。

どのように解決するのですか?

コメントした人が言っているのは、暗黙のうちに投げられると半無視される例外だと思います。 finally ブロックの リソースで試す ブロックの中で、既存の例外が投げられるコンテキストで try ブロックから投げられた既存の例外のコンテキストになります。

例外はtry-with-resources文に関連付けられたコードのブロックから投げることができます。writeToFileZipFileContents の例では、try ブロックから例外が投げられ、try-with-resources 文が ZipFile と BufferedWriter オブジェクトを閉じようとしたときに最大で二つの例外が投げられる可能性があります。もし、try ブロックから例外が投げられ、try-with-resources ステートメントから一つ以上の例外が投げられた場合、try-with-resources ステートメントから投げられた例外は抑制され、ブロックから投げられた例外は writeToFileZipFileContents メソッドが投げた例外となります。この抑制された例外は、tryブロックによってスローされた例外からThrowable.getSuppressedメソッドを呼び出すことによって取得することができます。

(リンク先のページから "Suppressed Exceptions" というセクションを引用したものです)。