在 Scala 中安静地关闭多个资源的更干净的方法

vat*_*ada 0 scala

我有多个资源,我想在finally块中悄悄地关闭它们。

以下是我当前使用的方法。是否有更好的(最好是更简洁和可读的)方法来实现相同的目的?

我也在寻找一些更清洁的方法来消除使用var存储资源。

    var connection1 = getConnection()
    var connection2 = getConnection()
    try {
      // do stuff
    } finally {
      try {
        if (connection1 != null) connection1.close()
      } catch {
        case NonFatal(_) => // log exception
      }
      try {
        if (connection2 != null) connection2.close()
      } catch {
        case NonFatal(_) => // log exception
      }
    }
Run Code Online (Sandbox Code Playgroud)

编辑:我知道我可以保留资源集合并循环它们以关闭它们,从而使代码简洁。但是,我很好奇是否有一些更好的 scala 构造可以使其更加简洁。

pme*_*pme 5

对于 Scala 2.13,它非常好:

import scala.util.Using
import java.io.{FileReader, FileWriter}
Using.resources(
  new FileReader("input.txt"), 
  new FileWriter("output.txt")) { (reader, writer) => 
    ???
}
Run Code Online (Sandbox Code Playgroud)

这将为您完成所有工作。

我在这里找到了这个:my-favorite-new-features-of-scala-2-13

如果您无法使用 2.13,还有一个链接:scala-try-with-resources