不重复:尽管与其他关于断言的问题类似,但这个问题特别关注要分发给第三方的库中的断言与异常,更具体地讲,这个库不一定会给使用它的应用程序指明致命的条件。
对于其他有重叠用例的问题,有许多相互冲突的答案,使得大多数答案对于我的具体情况来说相当模糊。
我维护简单的Java邮件,在代码中,我有几个地方抛出assertionerror
,表示状态已无效,而我作为库设计人员无法保证正常运行。 基本上,这些都不应该发生,我把它们作为一个故障安全/故障快。
现在,一个用户提出了一个问题,向我指出这种使用Java错误的做法是不恰当的,因为它可能会停止整个应用程序,而且无论如何,库用户很可能已经在某个地方实现了逐个案例的异常处理(意译)。 这对我来说也说得通。
什么适合库:断言错误还是异常?
也可以看到“在Java中主动抛出断言错误吗?”的答案,Google Guava(和Joshua Bloch)似乎支持错误,尽管还不完全清楚这是否也适用于库。
你的想法是对的。 在Java中,您可以使用异常来指示操作何时无法继续。 例如MalformedURLException和NumberFormatException。
我将向您指出的预构建异常是IllegalStateException,但您也可以创建out异常,在这种情况下,您需要考虑它应该扩展exception还是RuntimeException。