我正在为我们的一系列 API 编写一个客户端库,供第三方库使用。
我们使用的底层 http 客户端只会抛出 RuntimeExceptions。我不想让这些异常冒泡,而是将它们包装在我们自己的 ClientException 中。
但是,我读到的所有内容似乎都表明捕获运行时异常真的是不好的做法?
在编写供第三方使用的库时,这是规则的例外吗?
我正在为我们的一系列 API 编写一个客户端库,供第三方库使用。
我们使用的底层 http 客户端只会抛出 RuntimeExceptions。我不想让这些异常冒泡,而是将它们包装在我们自己的 ClientException 中。
但是,我读到的所有内容似乎都表明捕获运行时异常真的是不好的做法?
在编写供第三方使用的库时,这是规则的例外吗?
捕获未经检查的异常并没有错,尤其是为了包装和重新抛出。
不捕获未经检查的异常的建议可能适用的唯一情况是编写类似的内容
try { ... }
catch (RuntimeException e) { ... do some handling and move on ... }
因为这将阻止任何NullPointerException
s、IllegalArgumentException
s 等中断执行流程。这些异常都太笼统而无法自动恢复(可能出现在太多地方,出于太多不同的原因),并且通常表明如果代码没有中断,则更难以查明的编程错误。