0

我正在构建我的第一个 Java 库。该代码使用了很多 IO 方法,因此您可以想象有很多异常需要捕获。但我想知道,我应该抛出异常吗?我的意思是,捕捉异常肯定是应用程序编写者的工作。因为即使我抓住了它们,我也不知道应用程序在发生这种情况时会做什么。

我应该抛出 IOExceptions 等,还是应该在库代码中捕获它们?

4

2 回答 2

2

只有在可以处理的情况下,您才应该处理异常——即,如果您的库对如何处理异常有足够的了解。

这是您应该处理异常的示例:

  • 图书馆收到用户的请求
  • 库尝试读取配置文件
  • 因为找不到配置文件,所以出现 IOException
  • 库捕获异常并回退到使用默认配置(可能向用户发出没有配置文件的警告)

这是一个不应处理异常的示例

  • 图书馆收到用户的请求
  • 尝试从请求中的字符串解析整数时处理请求失败(获取 NumberFormatException)
  • 库无法处理异常 - 假设默认值(例如 0)会很危险
  • 异常被抛出给用户让他们处理

如果您要向用户抛出异常,捕获并重新抛出异常通常是一种好习惯——这使您能够将其包装在您自己的自定义异常类中,并可能添加额外的消息/详细信息等。

通常请记住,如果您想编写一个好的软件组件,那么它应该具有快速失败的行为。如果有疑问,您应该失败并让用户知道(通过异常),而不是尝试在不合理的基础上继续。

于 2012-09-14T05:23:09.287 回答
0

是的,这是一种常见的做法。但请确保尽可能多地抛出特定方法在运行时可能发生的所有适当异常。除此之外,根据Effective Java - Second Edition Item 62 -“记录每个方法引发的所有异常”。您可能永远不知道何时可以在下一个项目中重复使用或包含您正在处理的库。

有关详细信息,请阅读本书的第 9 章。

于 2012-09-14T04:53:27.830 回答