4

问题

上下文异常与嵌套异常的优缺点是什么?

为什么我在乎

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

有问题的项目是ddlutils。它目前使用 org.apache.commons.lang.exception ,其中指出:

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

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

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

4

1 回答 1

2

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

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

因此,再也没有人对“以前的 JDK 1.4”版本感兴趣了。

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

于 2013-03-29T15:53:23.367 回答