public interface AutoCloseable
AutoCloseable
オブジェクトのclose()
メソッドは、リソース指定ヘッダーでそのオブジェクトが宣言されているtry
-with-resourcesブロックの終了時に自動的に呼び出されます。この構築によって即時解放が確保され、それ以外の場合に発生する可能性のあるリソース不足例外およびエラーを回避できます。AutoCloseableのすべてのサブクラスまたはインスタンスが解放可能なリソースを保持するとは限りませんが、基底クラスがAutoCloseableを実装する可能性があり、実際にそれが一般的です。完全な普遍性で動作する必要があるコードの場合、またはAutoCloseable
インスタンスがリソースの解放を必要としていることがわかっている場合は、try
-with-resources構築を使用することをお薦めします。ただし、入出力ベースと非入出力ベースの両方の形式をサポートしている機能(Stream
など)を使用している場合、非入出力ベース形式の使用時は通常 try
-with-resourcesブロックは必要ありません。
修飾子と型 | メソッドと説明 |
---|---|
void |
close()
このリソースを閉じ、ベースとなるリソースをすべて解放します。
|
void close() throws Exception
try
-with-resources文で管理されているオブジェクトで自動的に呼び出されます。
このインタフェース・メソッドはException
をスローするように宣言されていますが、実装者には、close
メソッドの具象実装を宣言する際に、より具体的な例外をスローするか、またはクローズ処理で失敗できない場合は例外を一切スローしないことを強くお薦めします。
クローズ操作が失敗する可能のあるケースでは、実装者は細心の注意を払う必要があります。例外をスローする前に、ベースとなるリソースを解放し、リソースをクローズ済みとして内部的にマークすることを強くお薦めします。close
メソッドが複数回呼び出される可能性は低いため、これによってリソースはタイムリに解放されるようになります。さらに、リソースが別のリソースをラップするか、別のリソースによってラップされるときに発生する可能性のある問題も減少します。
このインタフェースの実装者には、close
メソッドからInterruptedException
がスローされないようにすることも強くお薦めします。この例外はスレッドの割込みステータスと相互に作用するので、InterruptedException
が抑制されるとおそらく実行時の誤動作が発生します。より一般的には、ある例外を抑制すると問題が発生する場合、AutoCloseable.close
メソッドはその例外をスローすべきではありません。
Closeable
のclose
メソッドと異なり、このclose
メソッドはべき等である必要はありません。つまり、このclose
メソッドを複数回呼び出すと何らかの副作用が発生する可能性がありますが、これは、複数回呼び出されても副作用がないことが要求されるCloseable.close
と異なります。ただし、このインタフェースの実装者には、自身のclose
メソッドをべき等にすることを強くお薦めします。
Exception
- このリソースを閉じることができない場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.