当IntelliJ建议我对以下内容进行更正时,我正在编写代码:
objectOne.equals(objectTwo);
告诉我,方法调用
equals
可能会生成很好的旧java.lang.NullPointerException
,并提出了我不知道的Objects.equals作为解决方案:Objects.equals(objectOne, objectTwo);
阅读文档时,我仅看到一个潜在的问题,即如果是
objectOne == null
和objectTwo == null
,那么结果是true
。此时,问题是:是否可以代替
.equals
开始在所有地方使用和替换此方法?这是一种安全的方法还是我缺少一些重大的禁忌症?
摆脱NPE非常吸引人...
谢谢
最佳答案
这个问题没有防弹的答案,因为它取决于程序的需求以及它应如何应对这种特殊情况。这样说,我会说:
如果有一个空值是程序员的错误(我的意思是您永远不会期望在算法内发生的事情),我建议您保留.equals方法,因为会出现空指针异常,并使您注意到该问题,我意思是,程序员的错误(那些我们不想要的错误!,这意味着我们写错了算法),并且您应该感谢应用程序报告该错误(而不是生气的真实客户...。)
但是,另一方面,如果您的应用程序也可以正常工作,而不是将其视为程序错误,则使用Object.equals会更好地满足您的需求。
一般的智慧表明,应该至少记录异常。
希望能帮助到你!
TD; DR;
尝试调查有关不同种类的异常。并非所有的异常都是程序员错误。
在Java中,通常,检查的异常适用于所有您可以预期的事件,您可以编写应能够处理的代码。 未检查的异常(属于RuntimeException家族的那些)用于您无法预期的事件(例如空指针异常),因此不可能编写代码来处理您不希望的事情(相反,应该请更正现有代码,而不要编写新代码!)
关于java - 用Objects.equals()替换.equals(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52428516/