【问题标题】:Does kotlin structural equality check super types?kotlin 结构相等性是否检查超类型?
【发布时间】:2018-04-05 17:03:14
【问题描述】:

我稍微阅读了我的主题标题,我只是想确保我正确理解了这一点。似乎答案是我们仍然需要在类上重写 equals 来定义结构相等检查是什么?所以换句话说,如果我们想检查customer1 == customer2,那么我们首先必须通过实现equals来定义Customer的结构相等,此时Kotlin将通过==运算符来使用我们的实现?

所以在这种情况下,如果 Customer 继承自 Person 并且我们还想使用来自 Person 的属性执行结构相等性检查,那么我们将在 equals(Object object) 方法中实现它?

【问题讨论】:

    标签: java kotlin hashcode equality


    【解决方案1】:

    所以换句话说,如果我们想检查 customer1 == customer2 那么我们首先必须通过实现 equals 来定义 Customer 的结构相等性,然后 Kotlin 将通过 == 运算符使用我们的实现?

    是的。如果Customerdata class,那么你会自动得到equals的实现,否则需要显式定义。

    所以在这种情况下,如果 Customer 继承自 Person,并且我们还想使用 Person 的属性执行结构相等性检查,那么我们将在 equals(Object object) 方法中实现它?

    再一次,是的(使用Any? 而不是Object),就像在Java 中一样,它...很复杂。有关更多信息,请参阅 https://stackoverflow.com/a/7798706/9204https://stackoverflow.com/a/13163898/9204 以及从它们链接的文章。

    我要补充一点,Kotlin 对“结构平等”一词的使用不是正常的。它通常保留用于通过比较所有(相关)字段的相等性来检查相等性的情况,例如data class,而不是“无论equals 碰巧做什么”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2017-01-20
      • 2012-02-23
      相关资源
      最近更新 更多