如果使用Guava中的com.google.common,为什么不应该使用Objects.requireNonNull()?

7
The Google Guava库的Preconditions Javadoc声明:

使用com.google.common的项目通常应避免使用Objects.requireNonNull(Object)。相反,使用适合情况的checkNotNull(Object)Verify.verifyNotNull(Object)。(相同的规则适用于接受消息重载。)

这个建议背后的动机是什么?在Javadoc中找不到任何信息。

我的意思是,它们基本上执行相同的操作,在这些情况下通常最好使用标准API(例如,Joda-Time的人现在建议人们使用java.time,基本上废弃了他们自己的框架)。

例如,这两个输入验证行都执行相同的操作:

class PreconditionsExample {
  private String string;

  public PreconditionsExample(String string) {
    this.string = Objects.requireNonNull(string, "string must not be null");
    this.string = Preconditions.checkNotNull(string, "string must not be null");
  }
}
2个回答

5
Guava的版本提供了许多重载函数,可以接受格式化字符串和参数。引用自PreconditionsExplained维基页面:
我们更喜欢使用自己编写的前置条件检查而不是使用Apache Commons等可比较的工具,原因如下:
简单的,支持可变参数的“printf风格”异常消息。(这也是为什么我们建议继续使用checkNotNull而不是在JDK 7中引入的Objects.requireNonNull的原因之一。)

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Magnilex

3

据我所知,

  1. 为了保持一致性
  2. 为了提供以下操作的另外一种方式,

    String world = "world"; Preconditions.checkNotNull(string, "Hello %s",world);

使用Objects时,你需要使用String.format方法。此外,两种方法的实现方式是相同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接