【问题标题】:Is it good to implement equals() for control flow?为控制流实现 equals() 好吗?
【发布时间】:2021-01-01 15:28:29
【问题描述】:

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

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

【问题讨论】:

    标签: java set equals object-oriented-analysis


    【解决方案1】:

    不,equals() 应该比较整个对象,或者应该比较 natural 唯一值,例如一个 ID 或一些项目代码。

    颜色不是一个项目的自然唯一标识符,所以不要实现equals() 来比较它。

    改为使用 TreeSet 和自定义 Comparator 来比较 color

    或者,使用由color 键入的Map

    【讨论】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        • 2017-01-09
        相关资源
        最近更新 更多