Ho appena avuto un'esperienza di risoluzione dei problemi abbastanza doloroso per la risoluzione di un codice che si presentava così:È un blocco finale senza blocco catch un anti-pattern java?
try {
doSomeStuff()
doMore()
} finally {
doSomeOtherStuff()
}
Il problema era difficile da risolvere perché doSomeStuff() ha generato un'eccezione, che a sua volta ha causato doSomeOtherStuff() per lanciare anche un'eccezione. La seconda eccezione (generata dal blocco finally) è stata generata sul mio codice, ma non aveva un handle sulla prima eccezione (generata da doSomeStuff()), che era la vera causa del problema.
Se il codice avesse detto questo, invece, il problema sarebbe stato subito evidente:
try {
doSomeStuff()
doMore()
} catch (Exception e) {
log.error(e);
} finally {
doSomeOtherStuff()
}
Quindi, la mia domanda è questa:
è un blocco finally usato senza alcun blocco catch una ben noto anti-pattern java? (Certamente sembra essere una sottoclasse non facilmente evidente del ben noto anti-pattern "Non trangugiare le eccezioni!")
Vedere anche una domanda simile su [try-finally senza catch in C#] (http://stackoverflow.com/questions/128818/why-is-try-finally-good-try-catch-bad) - the stessi argomenti si applicano. – avandeursen