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



有时我看到开发人员使用像 Guava 的前提条件这样的库来验证方法开头的 null 参数。这与在运行时获取 NPE 有何不同,因为运行时异常以任一方式发生?

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

一些原因是:

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

归根结底,这是一个品味问题。我见过本质上是空安全的程序,根本不需要先决条件。

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

还有构造函数的情况,您希望在将参数分配给字段之前checkNotNull,但我认为这不是您在谈论的内容,因为您谈论的是无论如何都会使用该参数的方法。

最新更新