gpt4 book ai didi

java - 为什么 try-with-resources 不能与字段变量一起使用?

转载 作者:IT老高 更新时间:2023-10-28 20:22:59 29 4
gpt4 key购买 nike

这是我关于 SO 的第一个问题,我很困惑还没有类似的问题!

所以问题是:

Why doesn't try-with-resources work with field variables?

或者换句话说:为什么我总是需要一个局部变量?

这里有一些示例代码:

public class FileWriteTest {

public FileWriter file;

public void workingDemo() {

try(FileWriter file = new FileWriter(new File("someFilePath")) {
// do something
} catch (IOException e) {
e.printStackTrace();
}

}

public void notWorkingDemo() {

file = null;

try(file = new FileWriter(new File("someFilePath")) {
// do something
} catch (IOException e) {
e.printStackTrace();
}

}

}

谁能解释一下为什么会有这个约定?

最佳答案

在 try-with-resources block 的执行过程中,可以随时更改实例变量。这会破坏它的不变量并阻止清理。请注意,出于同样的原因,局部变量是隐含的 final。

顺便说一句,一个更好的问题是,为什么Java 强制我们声明一个局部变量,即使我们没有在 block 中引用它。例如,C# 不需要这个。

更新:在第 9 版中,Java 不再强制我们:

private final Some obj = new Some();

try (obj) {
// obj captured in a hidden local variable, resource closed in the end
}

关于java - 为什么 try-with-resources 不能与字段变量一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17235307/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com