Guava Preconditions RuntimeExceptions处理

时间:2017-10-27 20:09:03

标签: java exception guava preconditions unchecked-exception

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

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

Preconditions.checkNotNull(fooObj);

但是,由于运行时异常,调用此API的程序可能会崩溃,在这种情况下是NullPointerException。

那么你如何处理这些未经检查的例外?

谢谢。

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

  • 数据访问层

  • API声明交换DTO的方法

  • 使用Guava

  • 实现API和检查参数的流程
  • Web服务取决于流程层

2 个答案:

答案 0 :(得分:5)

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

您的程序一般会在出现错误时向用户显示某种错误消息,但更重要的是,您应该获得通知,以便您可以首先修复错误。

答案 1 :(得分:2)

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

如果您只定义API,而不是定义它的程序,那么您将处理"通过在文档中告诉人们有问题的参数不能为空,并留下满足该要求的问题。

如果您正在编写调用程序,请首先尝试确保异常永远不会发生。您也可以将调用放在try/catch块中以捕获NullPointerException,但catch块的目的应该是为您提供更好的错误通知(例如,记录日志消息或触发警报)和触发环境,并可能更优雅地关闭或提供更友好的用户错误消息。试图从失败中恢复过来应该非常谨慎地完成 - 如果发生这种失败,那么你就没有预见到出现了问题,恢复的正确方法可能无法预测。