正如我所理解的,在更改一些对象状态之前,我们使用Guava预条件来快速失败(这是stackoverflow的一个很好的答案)。这很好。然而,它抛出了运行时异常,这不是应用程序用户最喜欢的异常(500个错误等等…)。所以我需要你在设计中给我一些帮助。
我有一个接口,它声明了许多方法。每个方法都有必须控制的参数(例如:不为null)。因此,在实现类中,我使用如下指令:
Preconditions.checkNotNull(fooObj);
但是,调用此API的程序可能会由于运行时异常而崩溃,在本例中为NullPointerException。
那么,如何处理这些未检查的异常呢?
谢谢。
--------编辑应用层:
数据访问层
API声明交换DTO 的方法
实现API并使用Guava 检查参数的过程
取决于流程层的Web服务
前提条件失败意味着程序有错误。用户不应该遇到这些问题,除非他们在你的程序中发现了错误。
您的程序通常应该在出现错误时向用户显示某种错误消息,但更重要的是,您应该得到通知,以便首先修复错误。
您可以通过设计程序来处理它们,以确保它们永远不会发生。这些先决条件方法旨在检测错误并帮助找到根本原因,而不是验证用户输入。
如果您只定义API,而不是调用它的程序,那么您可以通过在文档中告诉人们有问题的参数不能为空来"处理"它,并将满足该要求的问题留给他们。
如果你也在编写一个调用程序,首先要确保这个异常永远不会发生。您也可以将调用放在try/catch
块中以捕获NullPointerException
,但捕获块的目的应该是更好地通知错误(例如,记录日志消息或触发警报)和触发情况,并可能更优雅地关闭或提供更用户友好的错误消息。尝试从失败中恢复应该非常小心,或者根本不应该这样做——如果发生这种失败,那么就出现了你没有预见到的问题,正确的恢复方式可能是不可预测的。