为了避免我的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 语言。