kotlin结构平等检查超类型吗?

时间:2017-10-24 19:12:33

标签: java kotlin hashcode equality

我读到了我的主题更多一点,我只是想确保我理解正确。似乎答案是我们仍然需要在类上重写equals以定义结构相等性检查是什么?所以换句话说,如果我们要检查customer1 == customer2,那么我们首先要通过实现equals来定义Customer的结构相等性,然后Kotlin将通过{{==来实现我们的实现。 1}}运营商?

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

1 个答案:

答案 0 :(得分: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碰巧做什么”。