当IntelliJ建议我对以下内容进行更正时,我正在编写代码:

objectOne.equals(objectTwo);

告诉我,方法调用equals可能会生成很好的旧java.lang.NullPointerException,并提出了我不知道的Objects.equals作为解决方案:
Objects.equals(objectOne, objectTwo);

阅读文档时,我仅看到一个潜在的问题,即如果是objectOne == nullobjectTwo == null,那么结果是true

此时,问题是:是否可以代替.equals开始在所有地方使用和替换此方法?
这是一种安全的方法还是我缺少一些重大的禁忌症?

摆脱NPE非常吸引人...
谢谢

最佳答案

这个问题没有防弹的答案,因为它取决于程序的需求以及它应如何应对这种特殊情况。这样说,我会说:

如果有一个空值是程序员的错误(我的意思是您永远不会期望在算法内发生的事情),我建议您保留.equals方法,因为会出现空指针异常,并使您注意到该问题,我意思是,程序员的错误(那些我们不想要的错误!,这意味着我们写错了算法),并且您应该感谢应用程序报告该错误(而不是生气的真实客户...。)

但是,另一方面,如果您的应用程序也可以正常工作,而不是将其视为程序错误,则使用Object.equals会更好地满足您的需求。

一般的智慧表明,应该至少记录异常。

希望能帮助到你!

TD; DR;

尝试调查有关不同种类的异常。并非所有的异常都是程序员错误。

在Java中,通常,检查的异常适用于所有您可以预期的事件,您可以编写应能够处理的代码。 未检查的异常(属于RuntimeException家族的那些)用于您无法预期的事件(例如空指针异常),因此不可能编写代码来处理您不希望的事情(相反,应该请更正现有代码,而不要编写新代码!)

关于java - 用Objects.equals()替换.equals(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52428516/

10-10 23:01
查看更多