我有一个包含大量数据成员的类 - 其中一些是用户自定义的类,Lists,HashMaps等......
我们假设有20个数据成员。
除了检查每个字段的相等性之外,是否有更实用的方法来覆盖equals()
运算符?
例如(使用Guava):
HashMap<k,v> dataMember1;
String dataMember2;
CustomClass dataMember3;
etc...
@Override
public boolean equals(Object obj) {
Objects.deepEquals(this.dataMember1, obj.dataMember1) &&
Objects.equals(this.dataMember2, obj.dataMember2) &&
Objects.equals(this.dataMember3, obj.dataMember3) &&
etc...
}
之前我在生产代码中看过这些大块,但它们似乎总是多余。
答案 0 :(得分:2)
有一个名为Lombok的Java注释处理器,它提供了一些很好的注释来处理样板代码,包括@EqualsAndHashCode。
如果不可变性是可接受/可取的,Immutables和Google AutoValue库提供了创建值类的注释以及所有样板代码,包括equals()
方法。
答案 1 :(得分:1)
我认为你实现equals
的方式很好,但是它可能是一种代码气味,你应该把这些字段中的一些字段放到自己的类中。然后,您将比较较少的字段,因为每个类都可以实现自己的equals
。
无论如何,问题是一种症状,而不是原因。