アウトプットができる技術者に

it's a time to take a new step !

例外チェーン chained exception

例外チェーンとは、例外にメッセージ追記 → throw してあげることです。
具体的にはこんな感じ。

 try{
      String a = null;
      a.trim();
 } catch (NullPointerException nullEx) {
      Exception e = new Exception("完了処理メッセージの構築失敗");
      e.initCause(nullEx); 
      throw e;
 }

// 結果
Exception in thread "main" java.lang.Exception: 完了処理メッセージ構築の失敗
        at ExceptionChain.main(ExceptionChain.java:8)
Caused by: java.lang.NullPointerException
        at ExceptionChain.main(ExceptionChain.java:6)

上記のようにすることで、stackTraceに「完了処理メッセージの構築失敗」という文言が追記されます。で、「原因がヌルポですよ」という具合。


ちなみに、例外チェーンをしないで、そのまま throw すると、NullPointerExceptionだけが表示されます。

Exception in thread "main" java.lang.NullPointerException
        at ExceptionTest.main(ExceptionTest.java:5)

例外チェーンの方が原因がわかりやすいですね。
SampleCodeがいまいちなので、ピンと来ないかもしれませんが、例外処理の基本らしいので、抑えておきましょう。

1.5から使えるようになったみたいです。参考


ちなみに、基本的に 例外は握りつぶしてはいけません。
エラーに気付けないし、デバッグ大変です。

Java7 API Exception