我正在编写代码时,IntelliJ建议我更正:
objectOne.equals(objectTwo);告诉我方法调用equals可能会产生好的旧java.lang.NullPointerException,提出一些我不知道的解决方案,Objects.equals
Objects.equals(objectOne, objectTwo);阅读文档我只看到一个潜在的问题,如果是objectOne == null和objectTwo == null,那么结果就是true。
此时的问题是:--我可以开始在任何地方替换和使用这个方法--而不是.equals吗?这是一个安全的方法,还是我错过了一些大禁忌?
摆脱NPE是很有吸引力的..。谢谢
发布于 2018-09-20 15:33:13
这个问题没有防弹的答案,因为它取决于程序的需要和它应该如何回答这个特殊的情况。说到这里,我想说:
如果拥有null是程序员的错误(我指的是在算法中永远不会发生的事情),我建议离开.equals方法,因为空指针异常会出现,并使您注意到这个问题,我的意思是,程序员的错误(我们不想要的错误!,这意味着我们编写了糟糕的算法),您应该感谢应用程序报告它(而不是愤怒的真实客户端.)
但另一方面,如果您的应用程序也可以工作,而不是将其视为程序员错误,那么使用Object.equals将更适合您的需要。
普遍的观点认为,例外情况至少应该记录在案。
摘要
试着调查不同类型的例外情况。并不是所有的例外都是程序员错误。
在Java中,通常情况下,选中的异常适用于所有您可以预料到的事件,您可以编写能够处理的代码。而未检查的异常(属于RuntimeException家族的异常)是针对您无法预料的事件(比如空指针异常),因此不可能编写代码来处理您不期望的事情(相反,您应该更正已经存在的代码,而不是编写新代码!)。
发布于 2018-09-20 15:32:44
如果您希望允许空值,则这是一种适当的方法。否则,您只需添加一个空值检查并适当地处理它们。
发布于 2018-09-20 15:45:35
取决于您的代码和“无处不在”的含义。如果您的代码当前假设(可能不是显式的,但仅仅是因为空输入永远不会传播到equals调用之外),则空输入将导致NPE,那么切换到Objects.equals将引入一个bug。
https://stackoverflow.com/questions/52428516
复制相似问题