java - 在添加了字段的类中自动更新 equals() 和 hashCode() 方法。

标签 java automation equals apache-commons hashcode

生成 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/

相关文章:

android - flutter:是否可以点击屏幕上的某个 x,y 坐标?

mysql自动安装卡住了

c# - 覆盖 GetHashCode() 时使用 Guid().GetHashCode() 有什么缺点

java - 重写 hashCode() 不起作用

c++ - 所有不同质数的和等于 100

java - 使用 IN(...) 子句构建选择查询

java - 有没有办法让 SAXParser 在解析时忽略某些元素的内容?

java - JDialog不可见,组件可点击

java - 是否有一种干净(且为空安全)的方法来乘以 Java 中的映射值?

javascript - Protractor - 打开弹出窗口时,它不会等待此窗口内的所有元素