[英]Handling contained exceptions
我想知道一个人应该如何处理“包含”异常。 因为该术语不够具体,所以让我举一个PrivilegedActionException
的示例。
简而言之,此异常将在其cause
包含PrivilegedAction
计算期间引发的所有检查的异常。
现在,如果我有方法computate() throws IOException
我将-如果自己执行-将其处理为:
try {
computate();
} catch (FileNotFoundException ex) {
// Handle file not found
} catch (SomeOtherSubtypeOfIOException ex) {
// handle that again
}
现在,由于已在PriviledgedAction
执行了此操作, PriviledgedAction
我得到的唯一异常是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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.