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的原因.)
编辑:有一点需要注意的是,errorMessageTemplate的所有参数都被转换为String,String.valueOf(arg)
因此您只能使用%s而不能使用其他类型说明符,如%d或%f等.