Con*_*Map 26 java java-7 try-with-resources
这是我关于SO的第一个问题,我很困惑,还没有类似的问题!
所以问题是:
为什么不尝试使用资源来处理字段变量?
换句话说:为什么我总是需要一个局部变量呢?
这里有一些示例代码:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
愿任何人解释我为什么有这个约定?
Mar*_*nik 16
在try-with-resources块的执行期间,可以在任何时刻改变实例变量.这将破坏其不变性并防止清理.请注意,出于同样的原因,局部变量显然是最终的.
BTW一个更好的问题是,为什么Java 强制我们声明一个局部变量,即使我们在块中没有引用它.例如,C#不需要这样.
我怀疑设计师认为使用字段是一个坏主意,因为这允许对象逃离使用区域.即它仅在try块中有效,因此您无法在其他任何地方访问它.
| 归档时间: |
|
| 查看次数: |
7276 次 |
| 最近记录: |