当前位置: 首页 > 面试题库 >

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

颛孙英才
2023-03-14
问题内容

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

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

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

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

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


问题答案:

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



 类似资料:
  • 本文向大家介绍hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?相关面试题,主要包含被问及hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?时的应答技巧和注意事项,需要的朋友参考一下 面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” ha

  • 问题内容: 当覆盖java.lang.Object的equals()函数时,javadocs建议, 通常,无论何时重写此方法,都必须重写hashCode方法,以维护hashCode方法的常规约定,该约定规定相等的对象必须具有相等的哈希码。 hashCode()方法必须为每个对象返回一个 唯一的整数 (当根据内存位置比较对象时,这很容易做到,只需返回对象的 唯一的整数 地址即可) 应该如何重写has

  • 问题内容: 我有一些Java代码要翻译成Scala。 该代码由一些不可变的类组成,这些类适合Scala中的目的。 但我不希望引入错误,所以我想,以确保所生成的代码,并为/行为等同于目前的实现。 我已经看过“ Scala编程”,但只说 第三,编译器将方法的“自然”实现添加到String,hashCode,并等于您的类。 问题答案: Scala有一个编译器选项,您可以使用它来获取“内部使用的后键入源代

  • 本文向大家介绍请解释hashCode()和equals()方法有什么联系?相关面试题,主要包含被问及请解释hashCode()和equals()方法有什么联系?时的应答技巧和注意事项,需要的朋友参考一下 考点:基础 Java对象的eqauls方法和hashCode方法是这样规定的: ➀相等(相同)的对象必须具有相等的哈希码(或者散列码)。 ➁如果两个对象的hashCode相同,它们并不一定相同。

  • 问题内容: 决定将这些方法包含在java.lang.Object中的背后原因是什么?平等和哈希对于许多类没有意义。 建立两个接口将更加合乎逻辑: 例如,HashSet定义可能看起来像 这将防止出现一个常见的初学者错误-使用项目集而不实现equals / hashCode。 问题答案: 当我们实现一个接口时,我们注入(或接受)该接口定义的合同。 &是两个不同的合同。但是,如果我们仔细观察,就会发现它

  • 问题内容: 我有一个简单的班级角色: 现在,我想重写其方法equals和hashCode。我的第一个建议是: 但是,当我创建新的Role对象时,其id为null。这就是为什么我对hashCode方法实现有一些问题。现在,我可以简单地返回,但是如果没有RoleName字段,该怎么办?我几乎可以肯定,组成更复杂的示例并不难,而通过返回其字段之一的hashCode不能解决该示例。 因此,我想查看一些指向