我有多个资源,我想在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构造来使其更简洁。
答案 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