IDisposable metaphor in Java?
作为一名进入.NET的Java开发人员,我想了解IDisposable接口。有人可以尝试解释一下这一点,以及它与Java中发生的事情有何不同吗?谢谢。
作为一名进入.NET的Java开发人员,我想了解IDisposable接口。有人可以尝试解释一下这一点,以及它与Java中发生的事情有何不同吗?谢谢。
我写了一系列关于IDisposable的详细文章。
这里的基本思想是,有时你确实需要确定性地处置资源。IDisposable提供了这种机制。
例如,假设您在窗口中有一个控件。创建此选项后,它将在内部创建一个窗口句柄 (HWND)。从 Window 中删除该控件并不再使用该控件时,该控件将有资格进行垃圾回收 - 但它不会立即被收集。事实上,不能保证在收集之前需要多长时间。
在 GC 运行并处理孤立控件之前,它仍将使用资源,因为它仍持有 HWND。
IDisposable 为包含需要与 GC 分开的代码的对象提供了一种方法,以便由对象的用户显式清理。在控件的情况下,我们可以调用它将立即同步清理控件使用的“本机”资源(HWND)。myControl.Dispose(),
在java 1.7中,有一个新的引入的try-with-resource语句。
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
此处使用的对象必须实现自动关闭接口。它与 IDisposable 并不完全相同,但 最终自动调用 。这为实现类似行为提供了机会。close()
上面的代码与
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
在java教程中阅读更多相关信息。示例代码来自那里。