參考我的問題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)) –