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

sha*_*kan 20 java hashcode

对象javadocs和Josh Bloch告诉我们如何实现hashCode/equals,好的IDE将正确处理各种类型的字段.所有的,有些讨论是在这里.

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

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

一个团队(甚至一个团队!)如何帮助确保类的equals/hashCode继续考虑所有相关字段,因为成员字段会发生变化?

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

art*_*tol 8

从未尝试过,但http://code.google.com/p/equalsverifier/怎么样?


Tim*_*der 7

这个问题似乎提供了一个潜在的答案.

我没有太多关注Project Lombok,但我立刻想到,嗯注释可以用于代码生成器.