我可以在现有类中添加运算符吗?

时间:2015-11-17 14:01:22

标签: equals equality kotlin

在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

1 个答案:

答案 0 :(得分:4)

文档已过时,现在已不再可行。如果您使用该签名声明了equals扩展程序,则永远不会调用它,因为member functions always win超过了扩展程序,并且equals中有成员函数Any。您可以提供自己的equals的唯一方法是从Any覆盖该成员函数,但这对于数组来说当然是不可能的。我建议你尝试使用明确定义的equals / hashCode行为而不是数组的列表或其他数据结构。