在Kotlin中,我想在尚未获得equals
实现的现有课程中添加equals
方法。
在我的情况下,我想比较两个BooleanArray
实例。如果两个数组equals
和==
具有相同的大小并且所有项目都相同,则true
(以及a1
)应返回a2
。因此a1[i] === a2[i]
适用于所有0 <= i < size
。
The documentation states that operators can be defined by extension methods:
该函数必须声明为
fun equals(other: Any?): Boolean
或具有相同参数列表和返回类型的扩展函数。
BooleanArray
没有提供equals
方法。
所以我写道:
fun BooleanArray.equals(other: Any?): Boolean { return ... }
然而,这个扩展名被忽略了。当我比较两个BooleanArray
时,例如
BooleanArray(0).equals(BooleanArray(0))
它没有调用扩展方法,因此总是为两个不同的实例求值为false
。
答案 0 :(得分:4)
文档已过时,现在已不再可行。如果您使用该签名声明了equals
扩展程序,则永远不会调用它,因为member functions always win超过了扩展程序,并且equals
中有成员函数Any
。您可以提供自己的equals
的唯一方法是从Any
覆盖该成员函数,但这对于数组来说当然是不可能的。我建议你尝试使用明确定义的equals
/ hashCode
行为而不是数组的列表或其他数据结构。