没有更优雅的方法来选择性地“捕获”嵌套异常。我想如果您做了很多这样的嵌套异常,就可以将代码重构为通用的实用程序方法。但是它仍然不会优雅或高效。
优雅的解决方案是消除异常嵌套。要么不首先将异常链接起来,要么(有选择地)解开包装并将嵌套的异常重新扔到堆栈的上方。
嵌套异常的原因有3个:
您已经确定原始异常的详细信息不太可能对应用程序的错误恢复有用……但是您想保留它们以用于诊断。
您正在实现的API方法不允许特定的已检查异常,但是您的代码 不可避免地 会引发该异常。常见的解决方法是将“检查的异常”“走私”到未检查的异常内。
您很懒惰,并且将 各种 无关的异常转换为单个异常,以避免在方法签名1中包含大量已检查的异常。
在第一种情况下,如果现在需要区分包装的异常,那么您最初的假设是不正确的。最好的解决方案是更改方法签名,以便您摆脱嵌套。
在第二种情况下,您可能应在控件通过有问题的API方法后立即取消包装异常。
在第三种情况下,您应该重新考虑您的异常处理策略;即正确做2。
1-实际上,由于Java 7中引入了多异常catch语法,因此这样做的半合法原因之一已经消失。
2-请勿将您的API方法更改为
throwsException。这只会使情况变得更糟。现在,您
Exception每次调用方法时都必须“处理”或传播。这是癌症…
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)