更新:正如@PaulGroke在下面指出的,Java 7 中的情况发生了变化:现在有 AutoCloseable 接口。它并不仅限于流并且被新的 try-with-resources 结构支持。
当然,
AutoCloseable
是直接相当于 .NET 的 IDisposable
接口的 Java 等效物。
Closeable
接口是在 Java 1.5 中引入的,它与流紧密绑定,并且甚至有一个用于 IOException
的异常说明符。这表明它应该仅用于流或其他 IO 相关活动,而不是通用的清理逻辑。当然,
close()
方法的描述在流 / IO 上下文之外完全没有意义:
因此,我是否应该声明自己的接口
void close() throws IOException
关闭此流并释放与之相关联的任何系统资源。
Disposable
,并在其中使用 Dispose()
方法,将其用作 .NET 的 IDisposable
接口的类比?还是应该重用 Closeable
即使它可能不是一个完美的匹配?
IDisposable
的模式。只有在你的对象直接负责分配未托管资源(即未使用SafeHandle包装的本机资源)的相对罕见的情况下,才需要实现Object.Finalize()
。你所说的“.NET推荐实现
IDisposable的方式[...]需要使用
Object.Finalize()`”并不完全正确。 - Daniel Fortunov