【发布时间】:2020-11-04 21:32:06
【问题描述】:
不要像这样在尝试使用资源块中初始化资源:
try(FileWriter fw = new FileWriter ("java.txt")) {
//some operation
}catch (IOException ioe) {
ioe.printStackTrace ();
}
,我们现在可以传递一个对try with resources block的引用,我们希望自动关闭,如下所示:
FileWriter fw = new FileWriter ("java.txt");
try(fw) {
//some operation
}catch (IOException ioe){
ioe.printStackTrace ();
}
到目前为止,这部分很清楚。我的问题是为什么我将在下一个示例中显示的代码不起作用?它与前面编译得很好的例子有什么区别?
public class Test {
private FileWriter fileWriter;
public Test (FileWriter fileWriter) throws IOException {
this.fileWriter = fileWriter;
}
{
try(fileWriter) { //compile error:
//"Variable used as a try-with-resources resource should be final or effectively final""
}catch (IOException ioe){
ioe.printStackTrace ();
}
}
}
有人可以帮助我理解这条消息的含义吗?我不知道这里可能是什么问题。我还尝试将 final 放入 fileWriter 变量声明中,但没有解决问题。
【问题讨论】:
标签: java resources try-catch filewriter try-with-resources