在finally块中,我可以判断是否抛出了异常

Kev*_*vin 41 java exception try-catch-finally

可能重复:
在我输入finally块之前是否可以检测是否发生了异常?

我有一个工作流方法,并在发生错误时抛出异常.我想将报告指标添加到我的工作流程中.在下面的finally块中,有没有办法判断try/catch块中的一个方法是否引发了异常?

我可以添加自己的catch/throw代码,但更喜欢更清晰的解决方案,因为这是我在项目中重用的模式.

@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(); 
  }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*nik 58

Java没有提供自动方式.你可以使用布尔标志:

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


Viv*_*sse 8

两个解决方案:调用reportEndWorkflow两次,一次调用一次,一次调用catch结束try:

try {
    // ...
    reportEndWorkflow("success");
} catch (MyException ex) {
    reportEndWorkflow("failure");
}
Run Code Online (Sandbox Code Playgroud)

或者你可以引入一个布尔变量:

boolean finished = false;
try {
    // ...
    finished = true;
} finally {
    // ...
}
Run Code Online (Sandbox Code Playgroud)