Java的try-with-resource使用时遇到的问题

java 1.7之后,增加了 try-wit-resource的语法糖,大概的用法就是在try中声明一个或者多个的流,会在try块代码执行完成后自动关闭流,不用再写finally进行手都关闭。

try (InputStream is1 = ...;

    InputStream is2 = ...;) {

    //do something

} catch{

}

于是我就在项目中想改成这种写法,但是在改的过程中遇到了一些问题。我的代码中需要对声明过后的流再赋值,但是用这样的写法一直会报错,代码大概是这样的:

此时会编译出错:The resource is1 of a try-with-resources statement cannot be assigned

报错的原因是:try-with-source中声明的变量无法被更改。但是我很奇怪这是为什么,上网搜了没有搜到,于是去找了一下官方文档。官方文档中有一段这样的描述:

It is a compile-time error if final appears more than once as a modifier for each variable declared in a resource specification.
A variable declared in a resource specification is implicitly declared final (§4.12.4) if it is not explicitly declared final. 

 

意思就是,try-with-resource中声明的变量会隐式的加上final 关键字,所以无法再进行赋值。但是至于为什么这么设计,我暂时没找到答案。

你可能感兴趣的:(Java基础)