1

AutoCloseableJavaで実装することは重要ですか?

AutoCloseableそれを実装しない他のクラスを拡張するクラスを作成すると意味がありますか?

例えば

public class IGetClosed extends ICannotBeClosed implements AutoCloseable {...}
4

4 に答える 4

1

AutoClosableスーパークラスが実装していなくても、クラスを実装しても問題ありません。実際、Java のすべてのクラスはjava.lang.Object直接的または間接的に拡張されるため、すべてAutoClosableの は最終的にこのインターフェースを実装しないクラスを拡張します。

クラスに何らかのセマンティックがあるclose場合は、おそらく実装する必要がありますAutoClosable。コストがかかるとしても、ほとんどコストがかからず、Java 7 の try-with-resource 構文の巧妙な構文シュガーリングを使用できます。

于 2016-06-29T19:04:04.550 に答える
1

ドキュメントから:

void close() は例外をスローします

このリソースを閉じて、基になるリソースを放棄します。このメソッドは、try-with-resources ステートメントによって管理されるオブジェクトに対して自動的に呼び出されます。

このインターフェイス メソッドは Exception をスローするように宣言されていますが、実装者は close メソッドの具体的な実装を宣言して、より具体的な例外をスローするか、クローズ操作が失敗しない場合は例外をまったくスローしないことを強くお勧めします。

ICannotBeClosedしたがって、try-with-resources ステートメントで新しいクラスを自動的に閉じたい場合は、その機能をクラスに追加できます。

于 2016-06-29T19:05:03.913 に答える
1

AutoCloseableは、try-with-resources ステートメントで使用するときに、オブジェクトのリソースを自動的に閉じることを基本的に許可するインターフェイスです。オブジェクトを try-with-resources で使用する予定がない場合は、実装する必要はまったくありません。

継承のルールとして、いいえ、やりたいことをすることに本質的に問題はありません。子クラスのリソースを自動的に閉じたい場合は、すぐに行ってください。

于 2016-06-29T19:02:45.827 に答える