Доступ объявлен "try-with" -ресурс в catch-предложении - PullRequest
2 голосов
/ 11 декабря 2019

У меня есть автокламируемый класс с именем "VirtuellTx". Это особый вид транзакции, который поддерживает методы commit () и rollback (). Как получить доступ к объявленному ресурсу «VirtuellTx» в блоке catch для выполнения отката ()?

try (VirtuellTx lVtx = new VirtuellTx()) {
    // do something ...
    lVtx.commit();
} catch (Exception e) {
    lVtx.rollback();
}

Блок захвата не может получить доступ к lVtx: «lVtx не может быть разрешен»

1 Ответ

4 голосов
/ 11 декабря 2019

Ресурсы находятся только в области внутри блока оператора try-with-resources. JLS говорит :

Область действия переменной, объявленной в ResourceSpecification оператора try-with-resources (§14.20.3), взята из объявления справа над оставшейся частьюResourceSpecification и весь блок try, связанный с оператором try-with-resources.

Перемещение catch внутрь:

try (VirtuellTx lVtx = new VirtuellTx()) {
  try {
    // do something ...
    lVTX.commit();
  } catch (Exception e) {
    lVtx.rollback();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...