生成 equals()
和 hashCode()
很简单,IDE 的帮助可以轻松生成它们。但是随着时间的推移,可能会有更多的新字段添加到对象中。当项目的复杂性变得更高(代码中使用的对象数量变得更高)时,有时生成 equals()
和 hashCode()
可能会变得更加复杂。
向 bean 添加新字段的那一刻,人们必须重新生成 equals()
和 hashCode()
方法。如果有人忘记重新生成这将导致失败。
在添加新字段时,我找不到自动更新 equals()
和 hashCode()
的方法。我用 apache.commons.builder 发现了一些有趣的方法
现在我们可以通过以下方式覆盖equals()
和hashCode()
。
@Override
public boolean equals(Object o) {
return EqualsBuilder.reflectionEquals(this, o);
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
现在添加一个新字段不再是使用相同的 equals()
和 hashCode()
的问题。
现在我的问题是,有没有更好的方法来做到这一点。同样,这样我们也可以使用 toString()
方法。
最佳答案
例如,在许多集合中调用 equals 和 hashCode 方法的次数过多。我的投票是避免在上述方法中使用反射。
Guava 对此有另一种方法。 AutoValue 报价
AutoValue provides an easier way to create immutable value classes, with a lot less code and less room for error, while not restricting your freedom to code almost any aspect of your class exactly the way you want it.
关于java - 在添加了字段的类中自动更新 equals() 和 hashCode() 方法。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21013619/