嵌套异常与现代(Java SE 7)异常

时间:2013-03-27 19:18:36

标签: java exception-handling ddlutils nested-exceptions

问题

上下文与嵌套异常的异常有哪些优缺点?

为什么我关心

作为一名没有Java背景或了解Java背景的开发人员,我偶然发现了更新开源项目异常处理的可能性,但我希望确保我会做出改变是有益的。

有问题的项目是ddlutils。它目前使用org.apache.commons.lang.exception来声明:

  

"为以前的Java版本提供JDK 1.4样式的嵌套异常功能。"

Commons Lang的当前版本(撰写本文时为3.1)使用org.apache.commons.lang3.exception,其中声明:

  

"包含带有上下文的异常的概念,即这样的异常将包含带有键和值的映射。这提供了一种简单的方法,可以在异常时间将有价值的状态信息以有用的形式传递给调用进程。"

1 个答案:

答案 0 :(得分:2)

讨论这个问题你应该知道大约10年前发布的JDK1.4。它发明了异常链,只是意味着你有一个带有原因异常的构造函数。然后打印出所有内容的漂亮复合堆栈跟踪。在JDK1.4之前,JDK中存在许多这样的实现,并且这些实现已经统一到单个一致的解决方案。现在,lang所做的是提供一些类似的基类来将这个想法传递给较旧的JDK。然而,由于发生了很多事情:

  • JDK 1.3公共维护期结束
  • JDK 1.4公共维护期结束
  • JDK 5公共维护期结束
  • 现在JDK 6公共维护期即将结束。

因此,简单地说'JDK 1.4'版本中没有任何人会被强行插入。

另一方面,这个带有上下文的异常事件与任何JDK版本无关。它又是异常的基类,但它有一个Map来放置东西。通常,这是由具有附加字段的特殊异常类型实现的。这是类型安全,漂亮和干净。在每个例外都有一张地图,意味着永远不知道这张地图中的内容。我想不出这提供的任何好处。所以,如果你没有一个非常好的计划来使用它,我不会推荐它。