それには、わずかに異なる 3 つの答えが必要です。
はい、例外を同じタイプの別の例外にラップできます。
いいえ、例外をそれ自体に(つまり、まったく同じインスタンスに)ラップすることはできません。
残念ながら、はい、ループを作成できます(AがBを引き起こし、AがBを引き起こします...)。
最初のものは非常に明確です。別の によって引き起こされたIllegalStateException
ラッピングをラップできます。IllegalArgumentException
IllegalStateException
initClause()
2番目のものは、自己因果関係を防ぐコード(コンストラクターによって呼び出されるか、以前に呼び出されたことがない場合は直接呼び出すことができます)によって防止されます(実際cause == this
、原因が設定されていないフラグとして使用され、それを区別しますcause == null
これは、原因が明示的に に設定されたことを意味します) null
。
3 番目のビットは悪いですが、それを取得するには追加の作業を行う必要があるため、実際にはあまり頻繁に発生するべきではありません。
Exception e1 = new Exception();
Exception e2 = new Exception(e1);
e1.initCause(e2);
幸いなことprintStackTrace()
に、実際にそのケースを処理します。
java.lang.Exception: java.lang.Exception
at ScratchMain.main(ScratchMain.java:6)
Caused by: java.lang.Exception
at ScratchMain.main(ScratchMain.java:5)
[CIRCULAR REFERENCE:java.lang.Exception: java.lang.Exception]