在finally代码块中抛出一个异常会屏蔽之前在try或catch抛出的异常。
被屏蔽的异常信息和堆栈都会丢失。
如下代码:
try {
/* some work which end up throwing an exception */
throw new IllegalArgumentException();
} finally {
/* clean up */
throw new RuntimeException(); // Non-Compliant - will mask the IllegalArgumentException
}
应该重构为:
try {
/* some work which end up throwing an exception */
throw new IllegalArgumentException();
} finally {
/* clean up */ // Compliant
}