代码之家  ›  专栏  ›  技术社区  ›  Leviand

将.equals()替换为Objects.equals()

  •  5
  • Leviand  · 技术社区  · 8 年前

    我正在写代码,IntelliJ建议我更正:

    objectOne.equals(objectTwo);
    

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

    Objects.equals(objectOne, objectTwo);
    

    objectOne == null 和 objectTwo == null ,则结果为 true .

    此时的问题是: 我能开始替换和使用这个方法吗 .equals 这是一个安全的方法还是我错过了一些大禁忌症?

    摆脱NPE是非常有吸引力的。。。 谢谢

    3 回复  |  直到 8 年前
        1
  •  8
  •   Victor pozs    8 年前

    这个问题没有可靠的答案,因为这取决于项目的需要以及它应该如何应对这种特殊情况。说到这里,我想说:

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

    但另一方面,如果您的应用程序也能正常工作,而不将其视为编程错误,那么使用Object.equals将更适合您的需要。

    一般的看法是,应该至少记录例外情况。

    希望有帮助!

    尝试调查不同类型的例外情况。并非所有的例外都是程序员的错误。

    在java中,通常 对于所有您可以预期的事件,您可以编写应该能够处理的代码。以及 未检查的异常

        2
  •  6
  •   jobber2345    8 年前

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

        3
  •  4
  •   David Soroko    8 年前

    取决于你的代码和“无处不在”的含义。如果您的代码当前假定(可能不是显式的,但只是假定空输入永远不会传播到 equals Objects.equals 将引入一个bug。