导致异常的多个Java根本原因
我有一个有趣的场景,我在catch子句中设置了一个HttpServletResponse错误。“response.sendError(…)”也会引发异常。在异常处理期间处理异常以保留原始异常详细信息的最佳方法是什么 我有这样的想法:导致异常的多个Java根本原因,java,exception,exception-handling,Java,Exception,Exception Handling,我有一个有趣的场景,我在catch子句中设置了一个HttpServletResponse错误。“response.sendError(…)”也会引发异常。在异常处理期间处理异常以保留原始异常详细信息的最佳方法是什么 我有这样的想法: try { ... } catch(Exception e) { try { response.sendError(500); } catch(IOException e2) { //Can I do something like
try {
...
} catch(Exception e) {
try {
response.sendError(500);
} catch(IOException e2) {
//Can I do something like:
//'throw new ServletException(e,e2)' here?
}
}
换句话说,将两个异常中的信息捆绑到下一个抛出的异常中的最佳方法是什么?我不想在处理第二个异常时丢失第一个异常的信息
通常,多个try-catch块对于可读性来说似乎很糟糕。我希望避免这种混乱。始终可以将嵌入的try/catch捆绑到一个方法中。。。但仍然很糟糕,无法解决保留所有异常详细信息的问题。尝试:
try {
...
} catch(Exception e) {
try {
response.sendError(500);
} catch(IOException e2) {
e2.initCause(e);
throw e2;
}
}
如果异常已经有原因,则使用initCause()
将不会起作用。相反,您可以使用addsuppressed()
将异常包含在不同异常的堆栈跟踪中
try {
...
} catch(Exception e) {
try {
response.sendError(500);
} catch(IOException e2) {
e.addSuppressed(e2);
throw e;
}
}
谢谢-我不知道这是可能的。。。如果你正在处理一个已经有根本原因的异常,我想你是运气不好。不过,对于这种情况应该可以。我认为您可以创建更多异常并将它们链接起来。如果原因已设置为
e2
,您将如何处理?这有点棘手。在示例代码中,e2.initCause(e)如果原因已设置在e2上,则代码>将引发异常。