gpt4 book ai didi

Java:在 Closeable.close() 中注销监听器

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:51:03 28 4
gpt4 key购买 nike

有时我必须编写将自己注册为其他对象的监听器的对象。良好的编程实践表明我们应该始终注销此类监听器。通过使类实现 Closeable 并在 close() 中注销监听器来尝试强制执行此类行为是一种好习惯吗?

我认为 Closeable 主要是为了关闭操作系统资源(例如文件..),我不确定监听器的情况是否超出了 Closeable 的职责范围。

最佳答案

此处有一定程度的意见,但基于 documentation和方法的名称 close,我会为它创建一个不同的方法(并将其称为 unregister)。原因是您希望代码尽可能不言自明。

另请注意有关close() 本身的文档:

Closes this stream and releases any system resources associated with it. If the stream is already closed then invoking this method has no effect.

根据您描述的代码,不存在这样的流或系统资源。

编辑:

顺便说一句,如果您想使用 Closeable 解决方案,更好的方法是实现 AutoCloseable相反,因为它允许您在使用这些监听器的代码中使用 try-with-resources。在 AutoCloseable 的文档中,提到了以下内容:

API Note:

It is possible, and in fact common, for a base class to implement AutoCloseable even though not all of its subclasses or instances will hold releasable resources. For code that must operate in complete generality, or when it is known that the AutoCloseable instance requires resource release, it is recommended to use try-with-resources constructions. However, when using facilities such as Stream that support both I/O-based and non-I/O-based forms, try-with-resources blocks are in general unnecessary when using non-I/O-based forms.

此注释暗示一个类可以实现AutoCloseable,即使它的实现不使用实际资源。但是,该说明还建议至少应该有一个子类(在您的情况下,至少是一种类型的监听器)确实使用实际资源。 Stream API 就是这种情况。

关于Java:在 Closeable.close() 中注销监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42481508/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com