为控制流实现 equals() 是否好?

问题描述

假设我有一个Item,它有很多字段,其中之一是 color
我还有另一个Holder 存储 Item 的实例。
每个 Holder 可以有任意数量Item 实例,只要每个 Color 存在的实例不超过一个

以在两个项目的颜色相等时返回 true 的方式实现 equals() 是否有意义,以在 Holder 内部使用 Set 项目?或者我应该让 equals 只有在所有字段都相等时才返回 true 并使用另一种逻辑来实现 Holder 逻辑?

解决方法

不,equals() 应该比较整个对象,或者应该比较自然唯一值,例如ID 或某些商品代码。

颜色不是项目的自然唯一标识符,因此不要实现 equals() 来进行比较。

相反,使用带有比较 TreeSet 的自定义 Comparatorcolor

或者,使用 Map 键控的 color

,
  1. 最好为您的类的 equals 和 hashCode 方法创建覆盖。
  2. 主要考虑应该是什么真正使类的实例独一无二,什么定义指定它。
  3. 如果颜色属性很好且完全地定义了它,那么就这样吧(尽管这听起来至少在第一次看来不太可能)。
  4. 如果不是,那么最好不要使用颜色字段作为确定唯一性的唯一字段,因为您不知道将来如何使用该类的实例。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...