これまで本格的なJavaコーディングを行ったことはありませんでしたが、既存のスキル(DelphiとC#)に基づいて構文、ライブラリ、概念を学びました。私がほとんど理解していないことの1つは、次のprintStackTrace
ようにした後、例外を黙って消費するコードをたくさん見たことです。
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
}
}
私が遭遇したほとんどすべてのJavaの記事とプロジェクトには、このようなコードがあります。私の知識に基づくと、これは非常に悪いことです。ほとんどの場合、例外は次のように外部コンテキストに転送されます。
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
throw new AssertionError(e);
}
}
ほとんどの場合、例外は、基盤となるフレームワーク(Java Swingなど)に属する最も外側のループで処理されるはずです。Javaの世界でこのようにコーディングするのが標準のように見えるのはなぜですか?困惑しています。
私の経歴に基づいて、printStackTraceを完全に削除したいと思います。私は単に未処理の別名RuntimeException
(または、さらに良いAssertionError
)として再スローし、それを最も適切な場所であるフレームワークの最も外側のループでキャッチしてログに記録します。
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
throw new AssertionError(e);
}
}