如何可扩展地考虑 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);
}

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

  • 使用像 Lombok 这样的库,该库提供在编译阶段生成此类方法的方法
  • 使用 IDE 的内置代码生成功能

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

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

相关内容

  • 没有找到相关文章

最新更新