Praxis 18. 永遠不要隱藏任何一個異常

消失的 Exception

在 Java 的開發裡面,常常會遇見 Exception 的連鎖效應,也就是當 Exception A 發生的時候,觸發了 Exception B 再觸發了 Exception C ,最後 Caller method 只會收到 Exception C ,無法知道 Exception A 才是真正的原因。

1
2
3
4
5
6
7
8
9
public void demoException() throws Exception{
try{
throw new ("Exception A");
} catch (Exception e){
throw new Exception("Exception B");
} finally {
throw new Exception("Exception C");
}
}

此時此刻,調用方只會收到 Exception C ,其它的 Exception 都被吞掉了。

NestableException 粉墨登場

這個問題,老祖宗們都已經幫忙解決過了, Apache Common Lang 在 1.0 以後就提供了 NestableException,改寫上面的方法就會變成

1
2
3
4
5
6
7
public void demoException() throws Exception{
try{
throw new ("Exception A");
} catch (Exception e){
throw new NestableException("Exception B", e);
}
}

最後再透過 e.printStackTrace(); 就可以將整體的 Exception 歷程給呈現出來。