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