Java Disposable 模式

2022-09-02 21:14:26

C# 支持使用释放模式进行确定性垃圾回收的一次性模式

Java有这样的模式吗?

Java 7 具有可自动关闭功能,您可以将其与 try final 块一起使用来调用该方法。close

7 之前的版本呢?

Java 5 或 6 是否有一次性模式(确定性垃圾回收)?


答案 1

在Java 7之前最接近的只是“手动”尝试/最终块:

FileInputStream input = new FileInputStream(...);
try {
  // Use input
} finally {
  input.close();
}

当我第一次从 Java 背景开始使用 C# 1.0 时,我发现 C# 最擅长的语句之一。很高兴终于在Java 7:)using

您还应该考虑Guava中的Closeables - 它使您不必担心引用是否为空(就像语句一样),并且可以选择在关闭时引发“日志并吞咽”异常,以避免任何此类异常有效地“覆盖”从try块中抛出的异常。using


答案 2

处置模式的整个目的是支持 C# 的独特模式。Java在7之前没有类似的模式。using (temporaryObject)

所有具有资源的 Java 对象都通过手动关闭包含资源的对象来支持处置模式。