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

时间:2017-01-27 09:42:00

标签: java guava

来自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 个答案:

答案 0 :(得分:4)

Guava的版本提供了许多接受格式字符串和参数的重载。引用PreconditionsExplained wiki:

  

我们倾向于将自己的先决条件检查视为例如该   来自Apache Commons的可比实用工具有几个原因。简言之:

     

...

     
      
  • 简单,varargs“printf-style”异常消息。 (这个优势也是我们建议继续使用checkNotNull的原因   JDK 7中引入了Objects.requireNonNull。)
  •   

答案 1 :(得分:2)

AFAIK,

  1. 为了保持一致性
  2. 有关其他方式,

    String output = new ProcessExecutor() .command(params) .readOutput(true) .timeout(1, TimeUnit.MINUTES) .exitValue(0) .directory(new File(inputFilePath)) .execute() .outputUTF8();

  3. 使用Objects,您必须使用String.format。而且,两种方法的实现是相同的。