假设我有课 Item ,有很多字段,其中之一是 color .我还有一节课 Holder 存储 Item .每个 Holder 可以有任意数量的 Item 只要一个不超过一个 Color 出席。实施有意义吗 equals() 当两个项目的颜色相等时,使用 Set 支架内的物品数量?或者我应该 equals 仅当所有字段相等时才返回true,并使用另一个逻辑实现 Holder 逻辑?
Item
color
Holder
Color
equals()
Set
equals
9wbgstp71#
最好为类的equals和hashcode方法创建重写。主要的考虑应该是怎样使类的示例真正唯一,怎样定义和指定它。如果它是由color属性定义的,那么就这样吧(尽管这听起来至少在第一次查看时是不太可能的)。如果不是,那么最好不要使用color字段作为确定唯一性的唯一字段,因为您不知道将来如何使用类的示例。
plupiseo2#
不, equals() 应该比较整个对象,或者应该比较一个自然的唯一值,例如一个id或某个项目代码。颜色不是项的自然唯一标识符,因此不要实现 equals() 比较一下。相反,使用 TreeSet 有一个习惯 Comparator 相比之下 color .或者,使用 Map 键入者 color .
TreeSet
Comparator
Map
2条答案
按热度按时间9wbgstp71#
最好为类的equals和hashcode方法创建重写。
主要的考虑应该是怎样使类的示例真正唯一,怎样定义和指定它。
如果它是由color属性定义的,那么就这样吧(尽管这听起来至少在第一次查看时是不太可能的)。
如果不是,那么最好不要使用color字段作为确定唯一性的唯一字段,因为您不知道将来如何使用类的示例。
plupiseo2#
不,
equals()
应该比较整个对象,或者应该比较一个自然的唯一值,例如一个id或某个项目代码。颜色不是项的自然唯一标识符,因此不要实现
equals()
比较一下。相反,使用
TreeSet
有一个习惯Comparator
相比之下color
.或者,使用
Map
键入者color
.