Guava 先决条件 RuntimeExceptions 处理

Guava Preconditions RuntimeExceptions handling

据我了解,在更改某些对象状态之前,我们使用 Guava Preconditions 来快速失败(来自 Whosebug 的一个很好的回答 here)。这很好。但是它会抛出运行时异常,这不是应用程序用户最喜欢的异常(500 错误等等......)。所以我需要你在设计上给我一些帮助

我有一个声明了许多方法的接口。每个方法都有必须控制的参数(例如:不为空)。所以在实现中 class 我使用如下指令:

Preconditions.checkNotNull(fooObj);

但是,调用此 API 的程序可能会因运行时异常而崩溃,在本例中为 NullPointerException。

那么如何处理这些未经检查的异常呢?

谢谢。

-------- 编辑 应用层:

前提条件失败意味着您的程序有错误。除非用户在您的程序中发现错误,否则他们不应遇到这些问题。

您的程序应该一般在发生错误时向用户显示某种错误消息,但更重要的是,您应该得到通知以便修复错误第一名。

您通过设计程序来处理它们以确保它们永远不会发生。这些前置条件方法旨在检测错误并帮助准确找到根本原因所在,而不是验证用户输入。

如果您只定义 API,而不定义调用它的程序,那么您 "handle" 通过在您的文档中告诉人们所讨论的参数不能为空,然后离开满足他们的要求的问题。

如果您也在编写调用程序,请首先尝试确保永远不会发生异常。您也可以将调用放在 try/catch 块中以捕获 NullPointerException,但捕获块的目的应该是为您提供更好的错误通知(例如记录日志消息或触发警报) 和触发情况,并可能更优雅地关闭或提供更用户友好的错误消息。尝试从故障中恢复时应格外小心,否则根本不做 - 如果发生这种故障,则说明出现了您没有预见到的错误,并且可能无法预测正确的恢复方法。