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