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

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

objectOne.equals(objectTwo);

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

Objects.equals(objectOne, objectTwo);

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

在这一点上的问题是:我可以开始替换并在任何地方使用这种方法而不是.equals吗?这是一种安全的方法还是我遗漏了一些大的禁忌症?

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


BIG阳
浏览 312回答 3
3回答

慕的地10843

这个问题没有万无一失的答案,因为它取决于程序的需求以及它应该如何回答这种特殊情况。说到这里,我会说:如果有一个 null 是程序员的错误(我的意思是你永远不会期望在你的算法中发生的事情)我建议离开 .equals 方法,因为会出现空指针异常并让你注意到这个问题,我的意思是,一个程序员的错误(那些我们不想要的错误!,这意味着我们写了一个糟糕的算法),你应该感谢应用程序报告它(而不是一个愤怒的真实客户......)但是,如果另一方面您的应用程序也可以正常工作,而不是将其视为程序错误,那么使用 Object.equals 将更适合您的需求。一般的智慧建议异常应该至少被记录下来。希望能帮助到你!TD;DR;尝试调查不同类型的异常。并非所有例外都是程序员错误。在 java 中,通常,检查异常是针对所有您可以预期的事件,您可以编写应该能够处理的代码。而unchecked异常(那些所属的RuntimeException的家庭)的事件,你只是无法预料(如空指针异常),因此它是IMPOSIBLE来编写代码来处理事情,你不要指望(相反,你应该纠正已经存在的代码,不要写新的!)

宝慕林4294392

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

暮色呼如

取决于您的代码以及“无处不在”的含义。如果您的代码当前假定(可能不是明确的,但只是因为空输入永远不会传播到equals调用之外)空输入将导致 NPE,那么切换到Objects.equals将引入一个错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java