参考我的问题Any risk in a AutoCloseable wrapper for java.util.concurrent.locks.Lock?,我想知道为什么trh try-with-resource
需要命名为局部变量。为什么try-with-resource需要一个局部变量?
我现在的用法如下:
try (AutoCloseableReentrantReadWiteLock.Lock l = _lock.writeLock()) {
// do something
}
变量l
是try块内未使用的,只有污染的命名空间。从我所记得的类似的C#
using
语句不需要本地命名变量。
是否有任何原因,以下情况可能不被支持,并且在try块结束时关闭一个匿名局部变量?
try (_lock.writeLock()) {
// do something
}
这是[在Java 9中解决](https://blogs.oracle.com/darcy/entry/concise_twr_jdk9)。参见[JDK-8068949](https://bugs.openjdk.java.net/browse/JDK-8068948)。 – McDowell
@McDowell Java 9通过允许使用_existing_有效的最终变量来解决当前需要定义_new_变量的行为。从链接中不会显示Java 9将支持可自动关闭的资源_而不会显示标识符_。 ([在这里讨论。](http://mail.openjdk.java.net/pipermail/core-libs-dev/2015-January/030864.html)) –