Java 是否有 using 语句?

2022-08-31 08:57:09

Java 是否有在休眠状态下打开会话时可以使用的 using 语句?

在C#中,它是这样的:

using (var session = new Session())
{


}

因此,该对象超出范围并自动关闭。


答案 1

Java 7 引入了自动资源块管理,将此功能引入 Java 平台。以前版本的Java没有任何类似的东西。using

例如,您可以通过以下方式使用任何实现的变量:java.lang.AutoCloseable

try(ClassImplementingAutoCloseable obj = new ClassImplementingAutoCloseable())
{
    ...
}

Java的接口由流实现,自动扩展,因此您已经可以在块中使用流,就像在C#块中使用流一样。这相当于 C# 的 。java.io.CloseableAutoCloseabletryusingusing

版本 5.0 开始,休眠会话实现了自动关闭,并且可以在 ARM 块中自动关闭。在以前版本的休眠会话中,未实现自动关闭。因此,您需要使用Hibernate >= 5.0才能使用此功能。


答案 2

在Java 7之前,Java中没有这样的功能(对于Java 7及更高版本,请参阅Asaph关于ARM的答案)。

你需要手动完成它,这很痛苦

AwesomeClass hooray = null;
try {
  hooray = new AwesomeClass();
  // Great code
} finally {
  if (hooray!=null) {
    hooray.close();
  }
}

当两者都不能抛出任何异常时,这只是代码。// Great codehooray.close()

如果你真的只想限制一个变量的作用域,那么一个简单的代码块就可以完成这项工作:

{
  AwesomeClass hooray = new AwesomeClass();
  // Great code
}

但这可能不是你的意思。


推荐