始终使用已检查的异常

Always Use Checked Exceptions

我最近一直在重构一些 Java 代码...我发现有很多 RuntimeExceptions 被抛出(即未经检查的异常)。我已经创建了我自己的已检查异常,并用我自己的异常替换了这些 RuntimeExceptions 的每个实例。然后,这迫使我检查异常。

话虽如此,我发现检查异常更好,因为另一个开发人员将确保处理异常...而不是程序只是吃掉异常而不向用户显示任何内容。

我已经阅读了很多关于未检查异常与检查异常的文章。但是,我仍然觉得我更多地检查了异常,因为它减少了人为错误。

主要使用检查异常的编程有多差? 有没有其他人觉得他们更喜欢检查异常而不是未检查异常?

我的建议是:

  • 针对应由您认为是应用程序逻辑的一部分来处理的异常情况使用已检查的异常,例如:用户输入了一个不存在的用户名进行登录,用户尝试保存并且项目超出了允许的限制她的订阅等。这样,发现异常情况的代码的客户端将被迫至少承认可能发生这种情况的事实,并希望以最合适的方式处理它
  • 使用未经检查的异常在不受您控制且您无法使用应用程序逻辑从中恢复的情况下尽早失败,例如:您的函数接收到错误的参数作为参数:听起来像是抛出 'illegal argument exception',这是大多数编程语言的运行时异常

Checked exceptions 前期看起来很棒,但实际上它们根本没有解决它们旨在解决的问题(更多详细信息请参见此处 https://arpytoth.com/2016/04/08/the-problem-with-checked-exceptions/)。

Java不会强迫你处理异常,它只是强迫你准确地确认哪些异常可能会通过。大多数开发人员使用空块捕获它们,或者使用 throws 子句让异常通过。这通常会降低代码质量,因为它会变得更加冗长、复杂,有时甚至难以测试,而且没有任何显着的好处。另请注意,Java 的新功能也不能很好地处理已检查的异常(例如 lambda 表达式)。我的建议是避免检查异常并改用运行时。