番石榴先决条件的文档说明:
使用
com.google.common的项目通常应该避免使用Objects.requireNonNull(Object)。相反,可以使用checkNotNull(Object)或Verify.verifyNotNull(Object)中适合于这种情况的任何一种。(接受重载的消息也是如此。)
有人能解释一下这个建议的理由吗?
是为了一致性,还是Objects.requireNonNull的实现有根本问题?
发布于 2016-01-07 02:52:37
只是为了保持一致。实现是相同的。
发布于 2016-07-21 12:57:49
虽然从问题中的示例来看,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样式”异常消息。(这也是我们建议继续使用checkNotNull而不是JDK 7中引入的Objects.requireNonNull的原因。)
编辑:但是要注意的一点是,errorMessageTemplate的所有args都使用String.valueOf(arg)转换为字符串,所以您只能使用%s,而不能使用%d或%f等其他类型的说明符。
https://stackoverflow.com/questions/34646554
复制相似问题