在C#中,我可以使用该throw;
语句在保留堆栈跟踪的同时重新引发异常:
try
{
...
}
catch (Exception e)
{
if (e is FooException)
throw;
}
Java中是否有类似的东西(不会丢失原始堆栈跟踪)?
4
您为什么认为它会失去原始的堆栈跟踪?抛出新的SomeOtherException并忘记在构造函数或initCause()中分配根本原因时,松开它的唯一方法。
—
akarnokd
我相信这是.Net中代码的行为方式,但我不再乐观了。可能值得在某个地方查找它或进行一次小型测试。
—
ripper234 2009年
Throwable
s不会因为抛出它们而被修改。要更新堆栈跟踪,您必须调用fillInStackTrace()
。方便地,此方法在的构造函数中调用Throwable
。
在C#中,是的,
—
Tim Goodman 2013年
throw e;
将丢失stacktrace。但不是用Java。
Oracle上的一些有关Java 7异常的文档:捕获多个异常类型并使用改进的类型检查重新抛出异常
—
Guillaume