2011年2月20日日曜日

JDK7のAutoCloseable

JDK7からAutoCloseableインタフェースなるものが追加されてます。
このインタフェースを実装しているクラスの場合、JDK6以前のようにリソース解放処理をfainally句で行う必要がなくなります。

また、ThrowableにaddSuppressedメソッドが追加されていてtry句で発生した例外に対して、
リソース解消処理(JDK6までの、finally句でのリソース解放処理)で発生した例外を追加してくれています。

コードサンプル

public class Test {

    public static void main(String[] args) throws FileNotFoundException {
        // try句で、リソースを解放する必要のあるオブジェクトを生成する。
        // (対象のオブジェクトは、java.lang.AutoCloseableの実装クラスのみ)
        try (FileInputStream fis = new FileInputStream("C:\\work\\java\\idea_project\\src\\Test.java")) {
            fis.available();
        } catch (IOException e) {
            throw new RuntimeException("main failed.", e);
        }
    }
}