0

これらは、例外チェーンを実行できる 2 つの方法です。

Throwable initCause(Throwable)
Throwable(Throwable)

2 番目の方がよりエレガントで、より広く使用されていると思います。では、Java コア ライブラリの一部の標準例外にチェーン対応コンストラクタが実際にないのはなぜでしょうか?

4

1 に答える 1

0

これはjavadocが言うことです

これらの機能をすべて統合することには多くの利点があります。(1) 例外が何であるかに関係なく、ある例外が別の例外を引き起こしたという事実を記録したい人は誰でもそうできることを保証します。(2) ある例外が別の例外を引き起こしたという事実を記録するための共通 A​​PI を提供することにより、このタスクが容易になり、プログラマーがそれを行うのに手間がかかる可能性が高くなります。(3) 原因となる例外にアクセスするための共通 A​​PI を提供することにより、この情報が必要な人に提供される可能性が大幅に高まります。実際、提案されたメカニズムは、標準スタック バックトレースの一部として「因果連鎖」全体を出力し、既存のプログラムが作成者の側で追加の努力なしでこの情報を提供することを保証します。

これらの問題に対処するために、Throwable に getCause() と initCause(Throwable) の 2 つの新しいメソッドと、Throwable(Throwable) と Throwable(String, Throwable) の 2 つの新しいコンストラクタを追加しました。他の「汎用」例外クラス (Exception、RunTimeException、Error など) には、同様に (Throwable) および (String, Throwable) コンストラクターが装備されています。ただし、そのようなコンストラクターがない例外でも、initCause メソッドを介して「ラップされた例外」として使用できます。

http://docs.oracle.com/javase/1.5.0/docs/guide/lang/chained-exceptions.html

于 2012-07-20T08:13:13.597 に答える