如果使用了番石榴的com.google.common,为什么不应该使用Objects.requireNonNull()? - java

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");
  }
}

参考方案

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

与(例如)相比,我们更愿意滚动自己的前提条件检查的
出于某些原因,可以从Apache Commons获得类似的实用程序。简要地:

...

  • 简单,可变参数“printf样式”异常消息。 (这也是我们建议继续使用checkNotNull的原因,
    JDK 7中引入的Objects.requireNonNull。)
  • 为什么我不能在Java中重写方法wait()? - java

    Improve this question 我在类wait()中找到了方法Object。这是最终的,这意味着该方法不能被覆盖。有什么想法为什么是最终的? 参考方案 @Flavio-这实际上是一个很好的问题。当然,您不能覆盖它的原因是设计师将其“确定为最终”。做出此决定的一些潜在原因:您不希望人们弄乱基本类(“对象”类)上基本操作的语义。由于它是“最终的”,因…

    使用Appengine开发服务器测试邮件(java) - java

    我正在使用javamail从我的appengine应用程序发送邮件。它在部署中可以完美地工作,但是我不知道如何使用开发服务器来做到这一点。每当我需要测试sendmail时,就必须部署非常烦人的应用程序。 背景信息(为什么日志不起作用):我们知道电子邮件会转到appengine开发服务器上的日志。但是,想要从开发服务器发送电子邮件的主要原因是能够测试电子邮件的…

    Google Drive API访问我自己的帐户 - java

    我希望在服务器/笔记本电脑上运行一个简单的过程,每天将文件每天上传一次到Google驱动器中。我不想分享此信息,不允许其他用户使用它等。我发现的所有示例似乎都涉及浏览到一个地址以获得用户(我)的许可,然后获取身份验证代码等并继续参考:Java quickstart有没有一种方法/示例可以做到这一点而无需浏览器,每次我只想为自己的帐户获得许可时都获得唯一的身份…

    Web应用程序上的恶意用户是否可以操纵Web应用程序前端发送的输入(在表单数据旁边)? - java

    Web应用程序上的恶意用户是否可以通过任何可能的方式来操纵Web应用程序前端发送的输入(当然,这不是在谈论FORM DATA),但是发送的请求例如当我允许他编辑他的个人资料或他的内容时,他可能会操纵ID(userId或contentId),从而可能恶意地对其他用户的内容进行邪恶?这些输入固定在网页上并且不可编辑,但用户仍然可以操纵它们吗?用户是否可能以这种方…

    Google Calendar API未收到确认响应 - java

    我们已经在Java中完成了Google Calendar API的集成,我们能够发送会议请求,并且与会者可以接收该请求。但是,当与会者单击邮件中的“是”或“否”按钮时,响应存在一些问题,组织者将无法获得响应。问题是,当与会者试图接受或拒绝会议时,组织者没有得到回应。 java参考方案 我怀疑您尚未在事件上设置推送notifications,然后将通知您更改并…