Java 为控制流实现equals()好吗?

Java 为控制流实现equals()好吗?,java,set,equals,object-oriented-analysis,Java,Set,Equals,Object Oriented Analysis,假设我有一个类Item,它有很多字段,其中一个是color 我还有另一个类Holder,它存储项的实例 每个持有者可以有任意数量的项目实例,只要每个颜色不超过一个 当两个项目的颜色相等时,以返回true的方式实现equals()是否有意义,以使用支架内项目的集合?或者我应该使equals仅在所有字段相等时返回true,并使用另一个逻辑来实现Holder逻辑吗 最好为类的equals和hashCode方法创建重写 主要的考虑应该是什么真正使类的实例唯一,什么定义和指定它 如果它是由color属性定

假设我有一个类
Item
,它有很多字段,其中一个是
color

我还有另一个类
Holder
,它存储
项的实例

每个
持有者
可以有任意数量的
项目
实例,只要每个
颜色不超过一个

当两个项目的颜色相等时,以返回true的方式实现
equals()
是否有意义,以使用支架内项目的
集合?或者我应该使
equals
仅在所有字段相等时返回true,并使用另一个逻辑来实现
Holder
逻辑吗

  • 最好为类的equals和hashCode方法创建重写
  • 主要的考虑应该是什么真正使类的实例唯一,什么定义和指定它
  • 如果它是由color属性定义的,那么就这样吧(尽管这至少在第一次查看时听起来不太可能)
  • 如果不是,那么最好不要将颜色字段用作确定唯一性的唯一字段,因为您不知道将来如何使用该类的实例
  • 否,
    equals()
    应比较整个对象,或比较自然唯一值,例如ID或某些项目代码

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

    相反,使用带有自定义比较器的
    树集
    ,该比较器比较
    颜色

    或者,使用由
    color
    键控的
    Map