3

私が理解しているように、Java 7 の例外抑制機能は自動機能です。つまり、6 の finally ブロックであったもので発生した例外は、リソース割り当て時に発生した例外を優先して自動的に抑制されます。

そのため、この例では、a) リソースを開き、b) リソースを閉じるか、c) 両方で問題が発生する可能性があります。

私が理解しているように、Java 7 は、開いたときに発生した例外をスローします。他の場所で発生した抑制された例外を提供するように依頼できます。

    try (BufferedReader inputReader = Files
            .newBufferedReader(Paths.get(new URI(
                    "file:///Users/me/Desktop/readme.txt")), Charset
                    .defaultCharset())) {
        String inputLine;
        while ((inputLine = inputReader.readLine()) != null) {
            System.out.println(inputLine);
        }
    } 

問題は.. プログラマーは何が抑制されるかを決めることができるか? やっぱり、public addSuppressed()あります。

例とユースケースを提供してください。

4

2 に答える 2

4

tryこれは恣意的ではありません。抑制された例外は、そうでなければブロックの失敗の原因となった主な例外をマスクする例外であり、finallyブロック内のものです。この機能により、コンストラクト全体でスローされたすべての例外を確実に取得できますが、キャッチした例外がより重要になります。

抑圧されるものを選択することはできません。メソッドは確かにそこにあります。そうでなければ、すべてが機能しません。必要に応じて、独自の例外処理コードを作成し、addSuppressed自由に使用できます。

于 2012-07-22T19:27:49.000 に答える