当前位置:  开发笔记 > 编程语言 > 正文

java.util.Objects.requireNonNull vs Preconditions.checkNotNull

如何解决《java.util.Objects.requireNonNullvsPreconditions.checkNotNull》经验,为你挑选了2个好方法。

Guava Preconditions的文档说明:

使用的项目com.google.common一般应避免使用 Objects.requireNonNull(Object).取而代之的是,无论使用何种的 checkNotNull(Object)或者Verify.verifyNotNull(Object)是适当的情况.(对于接收消息的重载也是如此.)

有人可以解释这个建议的理由吗?

这是为了保持一致性还是存在根本性的错误Objects.requireNonNull



1> Louis Wasser..:

这只是为了保持一致性.实现是相同的.



2> Ajay Yadav..:

虽然从问题中的例子来看,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等.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有