Со ссылкой на мой вопрос 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
не используется внутри блока попытки и только загрязняет пространство имен. Из того, что я помню, аналогичный оператор 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 обращается к текущему поведению, которое требует определения переменной _new_, позволяя использовать эффективную конечную переменную _existing_. Из вашей ссылки не видно, что Java 9 будет поддерживать автоматически закрывающиеся ресурсы _ без видимого идентификатора_. ([Обсуждалось здесь.] (Http://mail.openjdk.java.net/pipermail/core-libs-dev/2015-January/030864.html)) –