Java 8 之后,还有哪些进化的功能?( 七 )

在Java 9中这个边缘情况终于解决了,因此现在的菱形运算符更通用:

try-with-resources语句中允许使用没有发生实质性改变的变量

Java 7引入的另一项改进就是try-with-resources语句,从此程序员无需再担心释放资源的问题。

我们来演示一下这个功能。首先,在Java 7之前如果想正确关闭资源,需要这样写:

有了try-with-resources语句,资源就可以自动释放,省却了许多繁文缛节:

尽管这个功能非常强大,但它有几个缺点(Java 9解决了这些缺点)。

虽然这种方法能处理多个资源,但很容易让代码丧失可读性。像这样在try关键字之后以列表的方式定义变量,看起来非常不符合常见的Java编程习惯:

而且,在Java 7之前,如果你想用这种写法来处理已有的变量,就必须定义一个临时变量。(例如JDK-8068948中的例子:https://bugs.openjdk.java.net/browse/JDK-8068948。)

为了解决这些问题,Java增强了try-with-resources,现在不仅能够处理新创建的变量,还能够处理局部常量,或者实际上不可变的局部变量:

推荐阅读