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