如何正确处理 catch 块中的嵌套异常
How to correctly handle nested exception inside catch block
我有以下代码,我试图了解如何正确处理 catch 块中的异常,以便抛出两个异常(mainException
和 anotherException
),以防万一anotherException
的我们不会丢失来自 mainException
的信息。
代码也很难闻——这种 try-catch 用法是某种反模式吗?有没有 better/correct 方法来处理这种情况?
try {
-some code-
} catch (RuntimeException mainException) {
try {
-another code-
} catch (Exception anotherException) {
throw anotherException;
} finally {
throw mainException;
}
}
在 Java 7 中,作为 try-with-resources 工作的一部分,Throwable
class was extended with support for suppressed 例外,专门用于此类场景。
public static void main(String[] args) throws Exception {
try {
throw new RuntimeException("Foo");
} catch (RuntimeException mainException) {
try {
throw new Exception("Bar");
} catch (Exception anotherException) {
mainException.addSuppressed(anotherException);
}
throw mainException;
}
}
输出(堆栈跟踪)
Exception in thread "main" java.lang.RuntimeException: Foo
at Test.main(Test.java:5)
Suppressed: java.lang.Exception: Bar
at Test.main(Test.java:8)
我有以下代码,我试图了解如何正确处理 catch 块中的异常,以便抛出两个异常(mainException
和 anotherException
),以防万一anotherException
的我们不会丢失来自 mainException
的信息。
代码也很难闻——这种 try-catch 用法是某种反模式吗?有没有 better/correct 方法来处理这种情况?
try {
-some code-
} catch (RuntimeException mainException) {
try {
-another code-
} catch (Exception anotherException) {
throw anotherException;
} finally {
throw mainException;
}
}
在 Java 7 中,作为 try-with-resources 工作的一部分,Throwable
class was extended with support for suppressed 例外,专门用于此类场景。
public static void main(String[] args) throws Exception {
try {
throw new RuntimeException("Foo");
} catch (RuntimeException mainException) {
try {
throw new Exception("Bar");
} catch (Exception anotherException) {
mainException.addSuppressed(anotherException);
}
throw mainException;
}
}
输出(堆栈跟踪)
Exception in thread "main" java.lang.RuntimeException: Foo
at Test.main(Test.java:5)
Suppressed: java.lang.Exception: Bar
at Test.main(Test.java:8)