我需要进行一些初始化,并在有任何异常的情况下进行清理。我仍然希望将异常传递给调用方。问题是我现在必须将此方法声明为throws Throwable,然后必须在调用方中显式处理此throwable,就像所有过程都没有隐式抛出Throwable一样。是不是很傻?


try {
  init_step1();
  init_step2();
}
catch (Throwable th) {
  clean();
  throw th;
}

最佳答案

一种方法是在finally块中执行清除,而是通过是否实际到达try块的末尾来注意是否存在异常:

boolean success = false;
try {
    // Stuff here
    success = true;
} finally {
    if (!success) {
        clean();
    }
}

07-24 09:38
查看更多