AutoCloseable
Javaで実装することは重要ですか?
AutoCloseable
それを実装しない他のクラスを拡張するクラスを作成すると意味がありますか?
例えば
public class IGetClosed extends ICannotBeClosed implements AutoCloseable {...}
AutoCloseable
Javaで実装することは重要ですか?
AutoCloseable
それを実装しない他のクラスを拡張するクラスを作成すると意味がありますか?
例えば
public class IGetClosed extends ICannotBeClosed implements AutoCloseable {...}
AutoClosable
スーパークラスが実装していなくても、クラスを実装しても問題ありません。実際、Java のすべてのクラスはjava.lang.Object
直接的または間接的に拡張されるため、すべてAutoClosable
の は最終的にこのインターフェースを実装しないクラスを拡張します。
クラスに何らかのセマンティックがあるclose
場合は、おそらく実装する必要がありますAutoClosable
。コストがかかるとしても、ほとんどコストがかからず、Java 7 の try-with-resource 構文の巧妙な構文シュガーリングを使用できます。
ドキュメントから:
void close() は例外をスローします
このリソースを閉じて、基になるリソースを放棄します。このメソッドは、try-with-resources ステートメントによって管理されるオブジェクトに対して自動的に呼び出されます。
このインターフェイス メソッドは Exception をスローするように宣言されていますが、実装者は close メソッドの具体的な実装を宣言して、より具体的な例外をスローするか、クローズ操作が失敗しない場合は例外をまったくスローしないことを強くお勧めします。
ICannotBeClosed
したがって、try-with-resources ステートメントで新しいクラスを自動的に閉じたい場合は、その機能をクラスに追加できます。
AutoCloseable
は、try-with-resources ステートメントで使用するときに、オブジェクトのリソースを自動的に閉じることを基本的に許可するインターフェイスです。オブジェクトを try-with-resources で使用する予定がない場合は、実装する必要はまったくありません。
継承のルールとして、いいえ、やりたいことをすることに本質的に問題はありません。子クラスのリソースを自動的に閉じたい場合は、すぐに行ってください。