![](/img/trans.png)
[英]java.lang.NullPointerException at java.util.Objects.requireNonNull
[英]java.util.Objects.requireNonNull vs Preconditions.checkNotNull
Guava Preconditions的文档说明:
使用
com.google.common
项目通常应避免使用Objects.requireNonNull(Object)
。 相反,使用checkNotNull(Object)
或Verify.verifyNotNull(Object)
中适合的情况。 (对于接收消息的重载也是如此。)
有人可以解释这个建议的理由吗?
是为了保持一致性还是Objects.requireNonNull
的实现存在根本性的错误?
这只是为了保持一致性。 实现是相同的。
虽然从问题中的例子来看,OP似乎是专门询问checkNotNull
的特定形式,但是通常还有一个细微的区别,即支持使用checkNotNull
,这反映在printf
样式的varargs表单中。 例如,使用Guava Preconditions
您可以执行以下操作:
public void getInput(String companyName) {
String context = "Google";
String moreContext = "Facebook";
checkNotNull(companyName, "Why not try %s or %s", context, moreContext);
}
使用Objects.requireNonNull
你必须做类似的事情
public void getInput(String companyName) {
String context = "Google";
String moreContext = "Facebook";
requireNonNull(companyName, "Why not try " + context + " or " + moreContext);
}
参考:参见前提条件说明的底部部分
简单,varargs“printf-style”异常消息。 (这个优点也是我们建议继续在JDK 7中引入的Objects.requireNonNull上使用checkNotNull的原因。)
编辑:有一点需要注意的是,使用String.valueOf(arg)
将errorMessageTemplate的所有参数转换为String,因此您只能使用%s而不能使用%d或%f等其他类型说明符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.