用Objects.equals()替换.equals()

Lev*_*and 5 java

我正在编写代码,当IntelliJ建议我修正:

objectOne.equals(objectTwo);
Run Code Online (Sandbox Code Playgroud)

告诉我,方法调用equals可能会产生旧的java.lang.NullPointerException,提出一些我不知道的解决方案,Objects.equals:

Objects.equals(objectOne, objectTwo);
Run Code Online (Sandbox Code Playgroud)

阅读文档我只看到一个潜在的问题,即if objectOne == nullobjectTwo == null,然后是结果true.

此时的问题是:我可以开始替换并使用这种方法代替.equals吗?这是一种安全的方法还是我错过了一些很大的禁忌症?

摆脱NPE非常有吸引力......谢谢

小智 7

如果您想允许空值,这是一种合适的方法。否则,您只需添加对空值的检查并适当处理它们。


Vic*_*tor 5

这个问题没有任何防弹的答案,因为它取决于该计划的需求以及它应该如何应对这一特殊情况.说,我会说:

如果有一个null是一个程序员的错误(我的意思是你将永远不会发生在你的算法中)我建议将.equals方法保留为空指针异常将出现并让你注意到问题,我的意思是,一个程序员的错误(那些我们不想要的错误!,这意味着我们写了一个不好的算法),你应该感谢申请报告它(而不是愤怒的真实客户......)

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

一般的智慧建议记录在皮革上的异常.

希望能帮助到你!

TD; DR;

尝试调查不同类型的异常.并非所有例外都是程序员错误.

在java中,通常,已检查的异常适用于您可以预期的所有事件,您可以编写应该​​能够处理的代码.而unchecked异常(那些所属的RuntimeException的家庭)是您刚才无法预料(如空指针异常)的事件,因此它是IMPOSIBLE编写代码来处理事情,你不要指望(相反,你应该纠正已有代码,不写新!)