acabo de tener una experiencia de resolución de problemas muy doloroso para solucionar un código que se veía así:¿Es un bloque finalmente sin bloque de captura un antipatrón de Java?
try {
doSomeStuff()
doMore()
} finally {
doSomeOtherStuff()
}
El problema fue difícil de solucionar porque doSomeStuff() inició una excepción, que a su vez causó doSomeOtherStuff() para lanzar también una excepción. La segunda excepción (lanzada por el bloque finally) fue arrojada a mi código, pero no tenía un control sobre la primera excepción (lanzada desde doSomeStuff()), que era la verdadera causa raíz del problema.
Si el código había dicho esto en su lugar, el problema habría sido evidente:
try {
doSomeStuff()
doMore()
} catch (Exception e) {
log.error(e);
} finally {
doSomeOtherStuff()
}
lo tanto, mi pregunta es la siguiente:
es un bloque finally utilizar sin ningún bloque catch un bien conocido java anti-patrón? (Ciertamente parece ser una subclase que no es fácilmente aparente del obviamente anti-patrón "¡No tragues excepciones!")
Véase también una pregunta similar en [try-finally without catch in C#] (http://stackoverflow.com/questions/128818/why-istry-finally-good-try-catch-bad) - the Se aplican los mismos argumentos. – avandeursen