我读了一些关于主题的文章,我只是想确保自己理解正确。似乎答案是,我们仍然需要重写类中的equals来定义什么是结构相等性检查?所以换句话说,如果我们要检查customer1 == customer2
,那么我们首先必须通过实现equals来定义Customer
的结构相等性,然后Kotlin将通过==
运算符使用我们的实现?
因此,在这种情况下,如果Customer
继承自Person
,并且我们还想使用Person
的属性执行结构相等性检查,那么我们可以在equals(Object object)
方法中实现它吗?
最佳答案
是。如果Customer
是data class
,那么您将自动获得equals
的实现,否则需要显式定义它。
再次,是的(使用Any?
而不是Object
),就像在Java中一样,而且...很复杂。有关更多信息,请参见https://stackoverflow.com/a/7798706/9204和https://stackoverflow.com/a/13163898/9204以及从它们链接的文章。
我还要补充一点, Kotlin 对“结构平等”一词的使用不是正常的。它通常用于通过比较所有(相关)字段的相等性来检查相等性的情况,例如data class
中,而不是“无论equals
碰巧做什么”。