我多读了一点主题标题,我只想确保我正确理解这一点。答案似乎是,我们仍然需要重写类上的equals,以定义什么是结构上的equality检查?换句话说,如果我们想检查customer1 == customer2
,那么我们首先必须通过实现equals来定义Customer
的结构等式是什么,这时Kotlin将使用我们通过==
运算符的实现?
因此,在这种情况下,如果Customer
继承自Person
,并且我们还想使用Person
的属性执行结构相等性检查,那么我们将在equals(Object object)
方法中实现它?
换句话说,如果我们想检查customer1==customer2,那么我们首先必须通过实现equals来定义什么是Customer的结构等式,然后Kotlin将通过==运算符使用我们的实现?
是。如果Customer
是data 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
碰巧做了什么"。