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

Gli*_*ide 5 java software-design guava

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

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

Inv*_*row 4

一些原因是:

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

在我看来,最终这是一个品味问题。我见过一些程序本质上是空安全的,并且根本不需要先决条件。

  • 任何人都不应低估自定义错误消息的价值。 (2认同)
  • 一般来说,只有“外部”使用的方法才需要参数检查。一旦进入您控制的代码(尤其是私有方法)中,您通常可以向自己证明参数必须为非空(当然在其他相关方面也是正确的)。我的一般规则是任何公共方法或构造函数总是进行参数检查。 (2认同)