5

在学习春天时,我偶然发现了这个问题。Java 支持已检查和未检查的异常。与语言无关的设计指南似乎偏爱未经检查的异常。这个问题就是为什么使用像 Spring 这样的控制容器的反转意味着我应该只使用未经检查的异常。

4

1 回答 1

6

“为什么使用像 Spring 这样的控制容器的反转意味着我应该只使用未经检查的异常”这个问题有点奇怪。而且我不确定使用 IoC 是否意味着您应该使用未经检查的异常。检查与未检查最终是上下文和意见的问题。

我对此的看法:

异常可以分为已检查异常和未检查异常。这仅仅意味着某些异常,即已检查的异常,要求我们在编译时指定应用程序在异常发生时的行为方式。未经检查的异常不要求我们进行编译时处理。要创建此类异常,您可以扩展 RuntimeException 类,它是 Exception 的直接子类。关于已检查与未检查的一个古老且常见的准则是,运行时异常用于指示应用程序通常无法预期或从中恢复的情况,而已检查异常是编写良好的应用程序应预期并从中恢复的情况。

我提倡只使用运行时异常。如果我使用的库有一个带有检查异常的方法,我会创建一个包装器方法,将其转换为运行时。那为什么不检查异常呢?Bob 大叔在他的“清洁代码”一书中认为,它们违反了 Open/Closed 原则,因为使用新的 throws 声明更改签名可能会对调用该方法的程序的许多级别产生影响。

我写了一篇关于处理异常的帖子,如果有兴趣可以查看:https ://dzone.com/articles/how-to-deal-with-exceptions

于 2018-10-25T08:21:57.467 回答