对象javadocs和Josh Bloch向我们介绍了如何实现hashCode / equals,并且良好的IDE将正确处理各种类型的字段。所有一些讨论是在这里。
这个问题是关于下一步的:您如何确保它们 保持 良好状态?
特别是,我觉得对于大多数类,应该按照Bloch的建议(以及Eclipse和其他IDE的实现)来实现equals / hashCode,并考虑该类上所有非派生的业务逻辑字段。在将新字段添加到类中作为持续工作的一部分时,人们常常忘记将它们添加到equals / hashCode实现中。当两个对象看起来相等,但实际上由于最近引入的字段的值不同时,这可能导致难以发现的错误。
当成员字段更改时,团队(甚至一个!)如何帮助确保类上的equals / hashCode继续考虑所有相关字段?
我知道Apache的EqualsBuilder和HashCodeBuilder可以使用反射,这显然会考虑正确的字段,但是我想避免使用它们的性能成本。是否还有其他方法可以标记均不包含在equals / hashCode中的字段,应该这样做吗?静态代码分析,IDE功能,单元测试技术?
我没有对Lombok项目进行过多研究,但是我立即想到,hmm注释可以与代码生成器一起使用。