有哪些方法可以使哈希码/等于与类的业务定义保持一致?

2022-09-02 04:37:41

Object javadocs 和 Josh Bloch 告诉我们很多关于应该如何实现 hashCode/equals 的信息,好的 IDE 将正确处理各种类型的字段。关于这里所有内容的一些讨论。

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

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

当成员字段发生变化时,一个团队(即使是一个团队!)如何帮助确保类上的 equals/hashCode 继续考虑所有相关字段?

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


答案 1

从来没有尝试过,但是 http://code.google.com/p/equalsverifier/ 怎么样?


答案 2

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

我没有深入研究过龙目岛项目,但我立即想到,嗯,注释可以与代码生成器一起使用。