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");
}