C#では、throw;
ステートメントを使用して、スタックトレースを保持しながら例外を再スローできます。
try
{
...
}
catch (Exception e)
{
if (e is FooException)
throw;
}
このようなJavaの何か(元のスタックトレースを失わない)はありますか?
4
なぜ元のスタックトレースが失われると思いますか?新しいSomeOtherExceptionをスローし、コンストラクターまたはinitCause()で根本原因を割り当てるのを忘れたときにそれを失う唯一の方法。
—
akarnokd 2009
これは.Netでコードがどのように動作するかと思いますが、私はもう前向きではありません。どこかで調べるか、小さなテストを実行することは価値があるかもしれません。
—
ripper234 2009
Throwable
それらをスローすることによって変更されることはありません。スタックトレースを更新するには、を呼び出す必要がありますfillInStackTrace()
。便利なことに、このメソッドはのコンストラクタで呼び出されThrowable
ます。
C#では、はい、
—
Tim Goodman
throw e;
スタックトレースが失われます。しかしJavaではありません。
Java 7の例外に関するOracleのドキュメント:複数の例外タイプをキャッチし、タイプチェックを改善して例外を再スローする
—
Guillaume