Java 创建库时捕获并包装运行时异常?

Java 创建库时捕获并包装运行时异常?,java,exception-handling,client-library,Java,Exception Handling,Client Library,我正在为第三方库使用的一系列API编写一个客户端库 我们使用的底层http客户端只抛出运行时异常。我不想让这些异常冒出来,而是将它们包装在我们自己的客户异常中 然而,我读到的一切似乎都表明捕获运行时异常是一种非常糟糕的做法 在编写供第三方使用的库时,这是一个例外吗?捕获未经检查的异常没有什么错,尤其是为了包装和重新引用 不捕获未检查异常的建议可能适用的唯一情况是编写以下内容 try { ... } catch (RuntimeException e) { ... do some handling

我正在为第三方库使用的一系列API编写一个客户端库

我们使用的底层http客户端只抛出运行时异常。我不想让这些异常冒出来,而是将它们包装在我们自己的客户异常中

然而,我读到的一切似乎都表明捕获运行时异常是一种非常糟糕的做法


在编写供第三方使用的库时,这是一个例外吗?

捕获未经检查的异常没有什么错,尤其是为了包装和重新引用

不捕获未检查异常的建议可能适用的唯一情况是编写以下内容

try { ... }
catch (RuntimeException e) { ... do some handling and move on ... }

因为这将阻止任何
NullPointerException
s、
IllegalArgumentException
s等中断执行流。这些异常都太一般,无法自动恢复(可能出现在太多的地方,原因太多),并且通常表示编程错误,如果代码没有在这些异常上中断,则很难确定这些错误。

它实际上是
运行时异常
还是特定的子类型?如果是后者,那么就没有这样的最佳实践会命令你不要抓住它。例如,Spring和Hibernate只抛出未检查的异常,并将其作为一项功能和最佳实践加以推广。Yes to是子类型,只是一个未检查的异常。“您阅读的所有内容”并不总是适合您的特定情况(而且要小心,因为在许多情况下,尤其是在互联网上,每个人都可以假装自己的观点是可信的参考来源,“你读到的所有东西”都只包含基于同一根源的误解/错误信息的多个陈述);做对您的场景最有意义的事情,并生成最干净、最直观的代码(和最直观的API)。如果您觉得您正在做一些需要进一步解释的事情,请清楚地记录下来。