C#では、スタックトレースを維持しながらthrow;
ステートメントを使用して例外を再スローできます。
try
{
...
}
catch (Exception e)
{
if (e is FooException)
throw;
}
Java(にこのような元のスタックトレースを失わないもの)がありますか?
catch (WhateverException e) {
throw e;
}
キャッチした例外を単純に再スローします(明らかに周囲のメソッドはそのシグネチャなどを介してこれを許可する必要があります)。例外は元のスタックトレースを維持します。
を好む:
try
{
...
}
catch (FooException fe){
throw fe;
}
catch (Exception e)
{
...
}
例外をThrowableとしてcauseパラメータとして渡すことで、例外を別の例外にラップして元のスタックトレースを保持することもできます。
try
{
...
}
catch (Exception e)
{
throw new YourOwnException(e);
}
Javaでもほとんど同じです。
try
{
...
}
catch (Exception e)
{
if (e instanceof FooException)
throw e;
}
Javaでは、キャッチした例外をスローするだけなので、単なるthrow
ではなくthrow e
です。 Javaはスタックトレースを維持します。
このようなもの
try
{
...
}
catch (FooException e)
{
throw e;
}
catch (Exception e)
{
...
}
キャッチした例外を他の例外にラップした場合(詳細情報を提供する場合)、またはキャッチした例外を再スローした場合、スタックトレースは保持されます。
try{ ... }catch (FooException e){ throw new BarException("Some usefull info", e); }