繁体   English   中英

java.util.Objects.requireNonNull vs Preconditions.checkNotNull

[英]java.util.Objects.requireNonNull vs Preconditions.checkNotNull

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的原因。)

编辑:有一点需要注意的是,使用String.valueOf(arg)将errorMessageTemplate的所有参数转换为String,因此您只能使用%s而不能使用%d或%f等其他类型说明符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM