我举个例子:
def fileLocation = '/path/to/my/file.txt'
new FileReader(fileLocation).withCloseable { fileReader ->
new BufferedReader(fileReader).withCloseable{ resource ->
doSomethingWithResource resource
}
}
字符串
有没有什么方法可以更紧凑地实现这一点,即没有嵌套withCloseable()
s?假设我需要三个流:我必须嵌套3个withCloseable()
,等等。
这个例子不起作用:
new BufferedReader(new FileReader(fileLocation)).withCloseable{ resource ->
doSomethingWithResource resource
}
型
如果外部流中存在异常,则内部流将不会被关闭。
请注意,我可以对这个过于简化的示例执行以下操作:
new File(fileLocation).newReader().withCloseable{ resource ->
doSomethingWithResource resource
}
型
但这在我们确实需要嵌套流的情况下将不起作用。在groovy中实现这一点的最佳方法是什么?
1条答案
按热度按时间icnyk63a1#
Java的try-with-resources也在Groovy版本3中。
你的榜样会成为
字符串
实际上,如果在try-with-resources中有多个语句,编译器将为每个语句生成嵌套的try-finally块。
关闭BufferedReader将关闭底层FileReader(参见1388602)。但是在BufferedReader构造函数因异常而失败的情况下,FileReader不会被关闭。所以如果你照你说的做的话会有资源泄露的危险
型