在计算覆盖 hashcode() 和 equals() 时我应该考虑所有字段吗?
Should I consider all fields while calculating overriding hashcode() and equals()?
我了解 hashcode() 和 equals() 之间的约定。我不明白的是,我是否应该在计算相同内容时包括 class(bean) 的所有字段?例如我需要在基于哈希的集合中使用我的 bean 对象并需要排序。 bean class 包含~25 个字段。
覆盖HashCode()和euqals()时是否需要考虑其所有字段?
除非绝对必要,否则不应覆盖 equals 或 hashCode 方法。
当您需要这样做时,请尝试仅使用使您的对象 "unique" 其中的字段。
为了对对象进行排序,您可以查看 Comparator or Comparable 界面,您可以使用该界面比较给定特定字段或一组字段的对象。
绝对不是必须使用所有成员,但我建议保留所有因对象而异的变量。可以有常量甚至变量,它们在对象之间可能不会有太大变化,如果还有其他唯一字段,您可以删除它们。
我什至在其中一个项目中看到过,只使用 "id" 字段(对象之间唯一的)来计算哈希码。
编辑:喜欢 Dimitry 在评论部分的建议,如果您想删除字段,请尝试:https://projectlombok.org/features/EqualsAndHashCode.html
看起来更干净
我了解 hashcode() 和 equals() 之间的约定。我不明白的是,我是否应该在计算相同内容时包括 class(bean) 的所有字段?例如我需要在基于哈希的集合中使用我的 bean 对象并需要排序。 bean class 包含~25 个字段。
覆盖HashCode()和euqals()时是否需要考虑其所有字段?
除非绝对必要,否则不应覆盖 equals 或 hashCode 方法。
当您需要这样做时,请尝试仅使用使您的对象 "unique" 其中的字段。
为了对对象进行排序,您可以查看 Comparator or Comparable 界面,您可以使用该界面比较给定特定字段或一组字段的对象。
绝对不是必须使用所有成员,但我建议保留所有因对象而异的变量。可以有常量甚至变量,它们在对象之间可能不会有太大变化,如果还有其他唯一字段,您可以删除它们。
我什至在其中一个项目中看到过,只使用 "id" 字段(对象之间唯一的)来计算哈希码。
编辑:喜欢 Dimitry 在评论部分的建议,如果您想删除字段,请尝试:https://projectlombok.org/features/EqualsAndHashCode.html 看起来更干净