0

Java 7 から、インターフェースを実装するすべてのクラスがステートメントで動作できるように、インターフェースCloseableを拡張するようにインターフェースが改良されました。これまで、Closeable インターフェイスは、InterrruptedException を含む例外を自由にスローできました。ただし、Java 7 では、ステートメントで使用される Closeable インターフェイスのインスタンスは、try ブロックを終了した後に close メソッドが自動的に呼び出されると、InterruptedException をスローする可能性があり、暗黙的な呼び出しによって抑制される可能性があります。AutoCloseableCloseabletry-with-resourcestry-with-resourcesInterruptedExceptionThrowable.addSuppressed(InterruptedException);

誰かが無意識のうちに例外を抑制し、プログラムが本来の動作をしていない可能性があることを考えると、これは Java の下位互換性ルールに違反しますか?

4

1 に答える 1

3

いいえ、これは下位互換性を損なうものではありません。「try-with-resources」機能は Java 7 で新しく追加されました。古いコードはそれを呼び出すことができませんでした。によってスローされた例外のキャッチに依存する古いコードはclose、通常の「try-catch」ブロックを引き続き使用し、「try-with-resources」を使用しないため、例外は抑制されません。このようなブロックは、抑制されているため「try-with-resources」に変換できませんが、そのまま機能します。

于 2014-08-07T19:18:20.250 に答える