有时我看到开发人员使用像Guava的Preconditions这样的库来验证方法开头的空值参数。与在运行时期间获取NPE有什么不同,因为运行时异常以任何一种方式发生?
编辑:如果有充分的理由,那么开发人员是否应该使用库对所有方法进行空值检查?
答案 0 :(得分:4)
有各种原因。正如评论中所提到的,一个重要的是在完成任何工作之前预先完成检查。对于具有从不解除引用特定参数的代码路径的方法而言,这种情况并不少见,在这种情况下,如果没有预先检查,对该方法的无效调用有时可能不会产生异常。目标是确保他们始终产生异常,以便立即捕获错误。也就是说,如果我要立即取消引用下一行或其他内容的参数,我不一定会使用checkNotNull
。
还有构造函数的情况,在为字段分配参数之前,您需要checkNotNull
,但我不认为这是您的意思谈论自从你谈论将要使用参数的方法。
答案 1 :(得分:4)
有些原因是:
归根结底,这是IMO的品味问题。我已经看到了本质上无效的程序,并且根本不需要预先条件。