0

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

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

Preconditions.checkNotNull(fooObj);

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

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

谢谢你。

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

  • 数据访问层

  • API 声明交换 DTO 的方法

  • 使用 Guava 实现 API 和检查参数的过程

  • Webservice 依赖于流程层

4

2 回答 2

5

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

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

于 2017-10-27T20:24:20.200 回答
2

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

如果您只定义 API,而不是调用它的程序,那么您通过在文档中告诉人们所讨论的参数不能为空来“处理”它,并将满足该要求的问题留给他们。

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

于 2017-10-27T20:34:58.437 回答