更干净的方法来关闭Scala中的多个资源

时间:2019-08-05 07:07:56

标签: 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
      }
    }

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

1 个答案:

答案 0 :(得分:4)

使用Scala 2.13,它非常不错:

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

这将为您完成所有工作。

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

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