【发布时间】:2014-10-03 18:05:50
【问题描述】:
我对 Guava 很陌生(老实说,我不是“很新”,我是该主题的新手),所以我决定浏览一些文档并在阅读本文时感到非常惊讶:
com.google.common.base.Preconditions.checkNotNull(...)
我不明白这种方法的意义。 这意味着不是这样做:
myObject.getAnything();
(如果 myObject 为空,可能会导致 NullPointerException)
我应该使用
checkNotNull(myObject).getAnything();
如果myObject 为空,将抛出NullPointerException,如果不为空,则返回myObject。
我很困惑,这可能是有史以来最愚蠢的问题,但是......
这有什么意义? 考虑到我能想到的任何情况,这两行代码的作用与结果完全相同。
我什至不认为后者更具可读性。
所以我一定错过了什么。这是什么?
【问题讨论】:
-
我并不认同在每个地方都添加 checkNotNull 的想法。恕我直言,如果您明确地验证您的输入,而不是过度依赖有助于混淆您的代码的语法糖,那会更可取。快速失败是可以的,但 checkNotNull 只是没有提供任何其他信息用于故障排除 --> 您可以简单地为错误的输入格式设置自己的异常,并输入一条很好的消息来解释具体情况
-
我完全同意这很荒谬。在我看来,检查 null 然后自己抛出 NPE 完全是疯了。至少抛出一个 ValidationException 或 IllegalArgumentException。
-
考虑使用
checkNotNull(reference, errorMessageTemplate, errorMessageArgs)提供更好的诊断:guava.dev/releases/23.0/api/docs/com/google/common/base/…
标签: java null guava preconditions