una todas propagacion personalizada manejo lista las lanzar excepciones excepcion ejemplos declaracion java exception try-catch-finally

todas - throws exception java



En un bloque final, puedo decir si se ha lanzado una excepción (3)

Posible duplicado:
¿Es posible detectar si ocurrió una excepción antes de ingresar a un bloque finally?

Tengo un método de flujo de trabajo que hace cosas y arroja una excepción si ocurre un error. Deseo agregar métricas de informes a mi flujo de trabajo. En el bloque finally de abajo, ¿hay alguna forma de saber si uno de los métodos en el bloque try / catch arrojó una excepción?

Podría agregar mi propio código catch / throw, pero preferiría una solución más limpia ya que este es un patrón que estoy reutilizando en mi proyecto.

@Override public void workflowExecutor() throws Exception { try { reportStartWorkflow(); doThis(); doThat(); workHarder(); } finally { /** * Am I here because my workflow finished normally, or because a workflow method * threw an exception? */ reportEndWorkflow(); } }


Dos soluciones: llame a reportEndWorkflow dos veces, una vez en un bloque catch y una vez al final de la try :

try { // ... reportEndWorkflow("success"); } catch (MyException ex) { reportEndWorkflow("failure"); }

O puede introducir una variable booleana:

boolean finished = false; try { // ... finished = true; } finally { // ... }


Estás allí porque tu try-block ha completado la ejecución. Si se lanzó una excepción o no.

Para distinguir entre cuándo ocurre una excepción o si la ejecución del flujo de su método se completó con éxito, podría intentar hacer algo como esto:

boolean isComplete = false; try { try { reportStartWorkflow(); doThis(); doThat(); workHarder(); isComplete = true; } catch (Exception e) {} } finally { if (isComplete) { // TODO: Some routine } }


No hay una forma automática de Java. Puede usar un indicador booleano:

boolean success = false; try { reportStartWorkflow(); doThis(); doThat(); workHarder(); success = true; } finally { if (!success) System.out.println("No success"); }