Обнаружить исключение в AutoCloseable close ()

Я хочу создать собственный 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 или оно завершилось нормально. Возможно ли это вообще?

Если требуется синтаксический анализ трассировки стека из нового исключения, ничего страшного. Более легкое программирование стоит того крошечного снижения производительности, которое приносит.

10
задан Bart van Heukelom 4 December 2011 в 16:22
поделиться