如何在equals()中按比例考虑null?

时间:2018-09-20 03:15:40

标签: java generics nullpointerexception null equals

为了避免在equals()中出现空指针异常,我必须考虑一个或多个空值的可能性。

是否有一种可扩展的方式来考虑空值?如果添加更多类型参数,以下代码将变得非常难看。

  public boolean equals(Pair<T, U> p) {

    boolean firstIsEqual, secondIsEqual;

    if (p.getFirst()==null) {
      firstIsEqual = first == null;
    }
    else {
      firstIsEqual = (first!=null) && (first.equals(p.getFirst()));
    }

    // copy-paste...
    if (p.getSecond()==null) {
      secondIsEqual = second == null;
    }
    else {
      secondIsEqual = (second!=null) && (second.equals(p.getSecond()));
    }

    return (firstIsEqual && secondIsEqual);
  }

1 个答案:

答案 0 :(得分:0)

唯一可扩展的解决方案是:

  • 使用Lombok之类的库来提供在编译阶段生成此类方法的方法
  • 使用IDE的内置代码生成功能

严重:现实世界中没有人手动编写equals / hashCode方法。您使用工具并告诉您在计算中应使用哪些字段。如果添加了字段,则必须记住要重新生成方法。

或者您使用支持数据类(例如Kotlin或Scala)的jvm语言。