Java7 try-with-resources - это здорово и все, но я не могу оборачивать себя тем, почему требуется включать объявление ресурса в оператор try
. Моя кишка говорит, что должно быть возможно:
CloseableResource thing;
try (thing = methodThatCreatesAThingAndDoesSomeSideEffect()) {
// do some interesting things
}
thing.collectSomeStats();
Увы, это приводит к синтаксической ошибке (критически ожидая ;
). Перемещение определения/объявления типа в оператор try
работает, что, конечно же, перемещает предмет в соответствующую область. Я могу понять, как обойти это, когда я хочу больше от моего AutoClosable
, чем закрываться, меня интересует, почему компилятор требует его так.