如何使用库检查空值比获取NPE更好?

时间:2015-01-22 19:05:01

标签: java guava software-design

有时我看到开发人员使用像Guava的Preconditions这样的库来验证方法开头的空值参数。与在运行时期间获取NPE有什么不同,因为运行时异常以任何一种方式发生?

编辑:如果有充分的理由,那么开发人员是否应该使用库对所有方法进行空值检查?

2 个答案:

答案 0 :(得分:4)

有各种原因。正如评论中所提到的,一个重要的是在完成任何工作之前预先完成检查。对于具有从不解除引用特定参数的代码路径的方法而言,这种情况并不少见,在这种情况下,如果没有预先检查,对该方法的无效调用有时可能不会产生异常。目标是确保他们始终产生异常,以便立即捕获错误。也就是说,如果我要立即取消引用下一行或其他内容的参数,我不一定会使用checkNotNull

还有构造函数的情况,在为字段分配参数之前,您需要checkNotNull,但我不认为这是您的意思谈论自从你谈论将要使用参数的方法。

答案 1 :(得分:4)

有些原因是:

  • 防止在第一次取消引用变量(可能为null)之前运行代码。
  • 您可以拥有自定义错误消息,例如“myVar为null,我无法继续进行”,或任何相关消息,这些消息在日志中看起来更好,更容易追溯。普通的NPE在日志中的可读性会降低。
  • 代码的可读性更好(可以说),因为阅读此代码的程序员将立即意识到这些值应该是非空的。

归根结底,这是IMO的品味问题。我已经看到了本质上无效的程序,并且根本不需要预先条件。