我需要进行一些初始化,并在有任何异常的情况下进行清理。我仍然希望将异常传递给调用方。问题是我现在必须将此方法声明为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();
}
}