ここではいくつかのレベルの意見がありますが、documentationとメソッドclose
の名前に基づいて、別の方法を作成して(unregister
と呼んでいます)。その理由は、コードを可能な限り自明にしたいからです。
またclose()
自体にドキュメントを注意してください。
はこのストリームを解放、それに関連するすべてのシステムリソースを閉じます。ストリームがすでに閉じられている場合、このメソッドを呼び出すことは効果がありません。
説明したコードに基づいて、そのようなストリームまたはシステムリソースはありません。
EDIT:あなたはCloseable
溶液で行きたい場合には
ところで、それは良い方法は、それはあなたがしよう - と、リソースのコードで使用することができるようになるので、代わりにAutoCloseable
を実装することである、と思われますこれらのリスナーを使用します。 AutoCloseable
のドキュメントでは、以下のものが挙げている:
API注:
基底クラスがAutoCloseableを実装することは、一般的な可能であり、実際にもかかわらず、ではないそのサブクラスのすべてインスタンスが解放可能なリソースを保持します。完全な一般性で動作する必要のあるコード、またはAutoCloseableインスタンスがリソースの解放を必要とすることがわかっている場合は、try-with-resources構造を使用することをお勧めします。ただし、I/Oベースのフォームと非I/Oベースのフォームの両方をサポートするStreamなどのファシリティを使用する場合、I/Oベースではないフォームを使用すると、try-with-resourcesブロックは一般的に不要です。
このノートでは、その実装が実際のリソースを使用しない場合でも、クラスはAutoCloseable
を実装することができることを意味します。ただし、実際のリソースを使用するサブクラス(少なくとも1つのタイプのリスナー)が少なくとも1つ存在する必要があることも示唆しています。これは、Stream
APIの場合です。
これは、リスナーが自身を登録解除する方法を知っていて、登録されているすべての場所を把握することを意味します。 –