Я хочу создать собственный AutoCloseable
, чтобы я мог превратить это:
try {
begin();
doThings();
commit();
} finally {
if (transactionIsActive()) rollback();
}
в более простую
try (Transaction t = begin()) { // too bad I have to store it in t though I don't use it
doThings();
}
Транзакцию
здесь будет AutoCloseable
, а в close ()
она зафиксирует или откатит
Но для того, чтобы это сработало, мне нужно было бы определить в Transaction.close ()
, возникло ли исключение внутри блока try или оно завершилось нормально. Возможно ли это вообще?
Если требуется синтаксический анализ трассировки стека из нового исключения, ничего страшного. Более легкое программирование стоит того крошечного снижения производительности, которое приносит.