一尘不染

有什么方法可以使hashCode / equals与类的业务定义保持一致?

java

对象javadocs和Josh Bloch向我们介绍了如何实现hashCode /
equals,并且良好的IDE将正确处理各种类型的字段。所有一些讨论是在这里

这个问题是关于下一步的:您如何确保它们 保持 良好状态?

特别是,我觉得对于大多数类,应该按照Bloch的建议(以及Eclipse和其他IDE的实现)来实现equals /
hashCode,并考虑该类上所有非派生的业务逻辑字段。在将新字段添加到类中作为持续工作的一部分时,人们常常忘记将它们添加到equals /
hashCode实现中。当两个对象看起来相等,但实际上由于最近引入的字段的值不同时,这可能导致难以发现的错误。

当成员字段更改时,团队(甚至一个!)如何帮助确保类上的equals / hashCode继续考虑所有相关字段?

我知道Apache的EqualsBuilder和HashCodeBuilder可以使用反射,这显然会考虑正确的字段,但是我想避免使用它们的性能成本。是否还有其他方法可以标记均不包含在equals
/ hashCode中的字段,应该这样做吗?静态代码分析,IDE功能,单元测试技术?


阅读 237

收藏
2020-12-03

共1个答案

一尘不染

我没有对Lombok项目进行过多研究,但是我立即想到,hmm注释可以与代码生成器一起使用。

2020-12-03