科特林结构等式检查超类型吗



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

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

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

是。如果Customerdata class,那么您将自动获得equals的实现,否则您需要显式定义它。

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

再次,是的(使用Any?而不是Object),就像在Java中一样,它。。。复杂的看见https://stackoverflow.com/a/7798706/9204和https://stackoverflow.com/a/13163898/9204,以及从中链接的文章,了解更多信息。

我要补充一点,科特林对"结构性平等"一词的使用并不正常。它通常保留在通过比较所有(相关)字段来检查相等性的情况下,如data class,而不是"equals碰巧做了什么"。

相关内容

  • 没有找到相关文章

最新更新