Mögliche Duplizieren:
Is it possible to detect if an exception occurred before I entered a finally block?In einem finally-Block kann ich feststellen, ob eine Ausnahme
ich eine Workflow Methode, die Dinge tut, und wirft eine Ausnahme, wenn ein Ein Fehler ist aufgetreten. Ich möchte Berichtsmetriken zu meinem Workflow hinzufügen. Gibt es im Block finally eine Möglichkeit, festzustellen, ob eine der Methoden im try/catch-Block eine Ausnahme ausgelöst hat?
Ich könnte meinen eigenen Fang/Wurf-Code hinzufügen, würde aber eine sauberere Lösung bevorzugen, da dies ein Muster ist, das ich in meinem Projekt wiederverwende.
@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();
}
}
Diese Frage könnte ein Duplikat der vorgeschlagenen sein, aber es ist sehr schwer zu sagen, weil die andere Frage ziemlich bewundernswert verworren ist. Die Fähigkeit, innerhalb eines Endblocks zu bestimmen, ob der Block innerhalb des normalen Ablaufs der Steuerung ausgeführt wird oder aufgrund einer ausgelösten Ausnahme, wäre immens nützlich, da dies die Transaktionsverarbeitung vereinfachen würde; Leider bieten weder Java noch C# derzeit diese Fähigkeit afaik. Schande. –