Powiel możliwe:
Is it possible to detect if an exception occurred before I entered a finally block?W końcu bloku, mogę stwierdzić, czy wyjątek został rzucony
Mam metodę przepływu pracy, który robi rzeczy, i zgłasza wyjątek, jeśli Wystąpił błąd. Chcę dodać dane raportowania do mojego przepływu pracy. W ostatnim bloku poniżej, czy istnieje sposób sprawdzenia, czy jedna z metod w bloku try/catch rzuciła wyjątek?
Mogę dodać własny kod catch/throw, ale wolałbym czystsze rozwiązanie, ponieważ jest to wzorzec, którego używam w całym projekcie.
@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();
}
}
To pytanie może być duplikatem tego sugerowanego, ale jest to bardzo trudne do odróżnienia, ponieważ inne pytanie jest dość wspaniale zawiłe. Możliwość określenia w ramach bloku końcowego, czy blok jest wykonywany w ramach normalnego przepływu sterowania, czy z powodu wyrzuconego wyjątku, byłaby niezwykle przydatna, ponieważ uprościłaby przetwarzanie transakcji; Niestety, ani java ani C# obecnie nie oferują tej zdolności afaik. Wstyd. –