繁体   English   中英

处理包含的异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM