Java 处理包含的异常
我想知道如何处理“包含的”异常。因为这个术语不够具体,让我举一个Java 处理包含的异常,java,exception-handling,Java,Exception Handling,我想知道如何处理“包含的”异常。因为这个术语不够具体,让我举一个PrivilegedActionException的例子 简而言之,此异常将在其中导致包含在PrivilegedAction的计算过程中引发的任何已检查异常 现在,如果我有一个方法compute()抛出IOException,那么如果它自己执行,我将按照以下方式处理它: try { computate(); } catch (FileNotFoundException ex) { // Handle file not foun
PrivilegedActionException
的例子
简而言之,此异常将在其中导致
包含在PrivilegedAction
的计算过程中引发的任何已检查异常
现在,如果我有一个方法compute()抛出IOException
,那么如果它自己执行,我将按照以下方式处理它:
try {
computate();
} catch (FileNotFoundException ex) {
// Handle file not found
} catch (SomeOtherSubtypeOfIOException ex) {
// handle that again
}
现在,由于这已在privilegedAction
中执行,我得到的唯一异常是PrivilegedActionException
:
try {
Subject.doAs(() -> computate());
} catch (PrivilegedActionException ex) {
// Now what?
}
我可以通过调用ex.getCause()
从上一个示例中获取IOException
,但是这看起来是什么样的呢?显而易见的方式看起来很奇怪
catch (PrivilegedActionException ex) {
if (ex.getCause() instanceof FileNotFoundException.class) {
// handle FileNotFound
} else if (ex.getCause() instanceof xxx) {
// something else
}
}
你可以找到原因,然后重新抛出。然后使用外部try-catch处理异常
catch (PrivilegedActionException ex) {
Throwable cause = ex.getCause();
if(cause !=null) throw ex.getCause();
else ex.printStackTrace();
}
这看起来几乎一样,但解释得更好: