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
什么”。