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

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

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

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

是。 如果Customer是一个data class ,那么你会自动获得equals实现,否则你需要明确地定义它。

所以在这种情况下,如果客户继承自Person,并且我们也希望使用Person中的属性执行结构相等性检查,那么我们将在equals(Object对象)方法中实现这一点?

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

我会补充说,科特林对“结构性平等”一词的使用不是正常的。 通常保留用于通过比较data class所有(相关)字段来检查equals情况,而不是“无论equals什么”。