Guava Preconditions的文档说明:
使用的项目
com.google.common一般应避免使用Objects.requireNonNull(Object).取而代之的是,无论使用何种的checkNotNull(Object)或者Verify.verifyNotNull(Object)是适当的情况.(对于接收消息的重载也是如此.)
有人可以解释这个建议的理由吗?
这是为了保持一致性还是存在根本性的错误Objects.requireNonNull?
Aja*_*dav 11
虽然从问题中的例子来看,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);
}
Run Code Online (Sandbox Code Playgroud)
与Objects.requireNonNull你将不得不这样做
public void getInput(String companyName) {
String context = "Google";
String moreContext = "Facebook";
requireNonNull(companyName, "Why not try " + context + " or " + moreContext);
}
Run Code Online (Sandbox Code Playgroud)
参考:参见前提条件说明的底部部分
简单,varargs"printf-style"异常消息.(这个优点也是我们建议继续在JDK 7中引入的Objects.requireNonNull上使用checkNotNull的原因.)
编辑:有一点需要注意的是,errorMessageTemplate的所有参数都被转换为String,String.valueOf(arg)因此您只能使用%s而不能使用其他类型说明符,如%d或%f等.