14

私はこのリンクを読んでいましたが、次のように書かれtry-with-resourcesています:

Closeableインターフェイスの close メソッドは type の例外をスローIOExceptionし、インターフェイスの close メソッドはtype のAutoCloseable例外をスローしますException

しかし、なぜ?の close メソッドAutoCloseableもスローされた可能性があるタイプの例外をスローする必要IOExceptionがあるの close メソッドをサポートする例はありますAutoCloseableException

4

3 に答える 3

14

AutoClosableインターフェースは にあり、「java.lang自動的に」閉じる必要があるリソースに適用することを目的としています ( try-with-resources )。AutoClosableIO 関連のリソースであってはなりません。したがって、インターフェースは具体的な例外を想定することはできません。

一方、aはfor io リソースであるためClosablejava.ioand extendsにあります。したがって、クローズ時に s をスローできることを宣言します。AutoClosableClosableAutoClosableIOException

たとえば... ajava.sql.ConnectionAutoClosableclose メソッド throwsSQLExceptionであり、 aSQLExceptionは ではないためIOExceptionです。インメモリ DB について考えてみると、SQL 接続を閉じてもIOException.

編集

もう 1 つの疑問に答えました。つまり、なぜ AutoClosable が java.lang パッケージの下に保持されているのかということです。ありがとう。

Java 1.7 で言語機能としてtry-with-resourcesjava.langが導入されたため、配置されていると思います。したがってjava.lang

于 2014-09-21T13:45:43.227 に答える
8

CloseableextendsAutoCloseableですが、このインターフェイスを拡張する他の特定のインターフェイスが存在する可能性があります。例えば:

public interface MyCloseable extends AutoCloseable { 
    void close() throws RuntimeException; 
}

多くの場合に使用できるインターフェイスが必要でした。これがException、他の種類の例外でも機能するため、使用することにした理由です。

于 2014-09-21T13:49:22.907 に答える