转自:https://blog.csdn.net/qq_15118961/article/details/79884797

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

try (InputStream is1 = ...;
     InputStream is2 = ...;) {
    //do something
} catch{
}

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

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

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

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

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

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 关键字,所以无法再进行赋值。但是至于为什么这么设计,我暂时没找到答案。

相关文章:

  • 2018-02-01
  • 2021-09-12
  • 2021-08-10
  • 2022-01-03
  • 2021-08-15
  • 2021-06-04
  • 2021-12-28
  • 2021-12-01
猜你喜欢
  • 2021-06-03
  • 2021-07-08
  • 2022-12-23
  • 2022-12-23
  • 2021-12-04
  • 2021-11-25
  • 2021-08-13
相关资源
相似解决方案