首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.util.Objects.requireNonNull对Preconditions.checkNotNull

java.util.Objects.requireNonNull对Preconditions.checkNotNull
EN

Stack Overflow用户
提问于 2016-01-07 02:42:59
回答 2查看 7.4K关注 0票数 22

番石榴先决条件的文档说明:

使用com.google.common的项目通常应该避免使用Objects.requireNonNull(Object)。相反,可以使用checkNotNull(Object)Verify.verifyNotNull(Object)中适合于这种情况的任何一种。(接受重载的消息也是如此。)

有人能解释一下这个建议的理由吗?

是为了一致性,还是Objects.requireNonNull的实现有根本问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-07 02:52:37

只是为了保持一致。实现是相同的。

票数 19
EN

Stack Overflow用户

发布于 2016-07-21 12:57:49

虽然从问题中的示例来看,OP似乎专门询问特定形式的checkNotNull,但在一般情况下,有一个更微妙的不同,就是赞成使用checkNotNull,这反映在printf样式的varargs表单中。例如,使用Guava Preconditions,您可以执行以下操作:

代码语言:javascript
复制
public void getInput(String companyName) {
   String context = "Google";
   String moreContext = "Facebook";
   checkNotNull(companyName, "Why not try %s or %s", context, moreContext);
}

对于Objects.requireNonNull,您将不得不做如下的事情

代码语言:javascript
复制
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等其他类型的说明符。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34646554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档