用于覆盖具有多个字段的类的等价的实用方法

时间:2018-01-09 15:45:17

标签: java

我有一个包含大量数据成员的类 - 其中一些是用户自定义的类,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...
}

之前我在生产代码中看过这些大块,但它们似乎总是多余。

2 个答案:

答案 0 :(得分:2)

有一个名为Lombok的Java注释处理器,它提供了一些很好的注释来处理样板代码,包括@EqualsAndHashCode

如果不可变性是可接受/可取的,ImmutablesGoogle AutoValue库提供了创建值类的注释以及所有样板代码,包括equals()方法。

答案 1 :(得分:1)

我认为你实现equals的方式很好,但是它可能是一种代码气味,你应该把这些字段中的一些字段放到自己的类中。然后,您将比较较少的字段,因为每个类都可以实现自己的equals

无论如何,问题是一种症状,而不是原因。