Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/04/2009, 00:49
GreenEyed
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Respuesta: try catch dentro de finally

El try/catch dentro de un bloque finally no es de por si incorrecto, ya que a veces es necesario hacer alguna operación en un finally que podría lanzar una excepción.
Los casos más tipicos son los de cerrar una conexión a BDD o cerrar un Stream, cosas que se hacen habitualmente en un finally y que lanzan excepciones, por lo que hay que hacer un try/catch dentro del finally.

Lo de lanzar una excepcion dentro de un catch, tampoco es incorrecto siempre. Muchas veces es habitual si quieres "enmascarar" una excepción y que a la capa de arriba no le salte cualquier tipo de excepción si no unas excepciones controladas.

Por ejemplo, si tu lógica sólo puede lanzar MiAppException, entonces capturas todas las demás, creas una nueva MiAppException, le inicializas el contexto con initCause (muy importante) y lanzas la nueva MiAppException. De esta forma las clases que llaman a tu lógica solo tienen que tratar las MiAppException y no tratar cualquier cosa que pueda ser llamada internamente por tu lógica. Cuando encapsulas la lógica, tambien se suelen encapsular las excepciones.

De todas formas, como cualquier mecanismo de programación, también se pueden usar mal y hacer un catch de una excepción para lanzar Exception sin ni siquiera pintar la traza y sin inicializar bien el contexto de la nueva excepción, es una barbaridad desde el punto de vista de la programación.

Pero así de buenas a primeras, ninguna de las dos cosas es ni buena ni mala.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.