我有多个资源,我想在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 构造可以使其更加简洁。
对于 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