我可以添加运算符到现有的类吗?

在Kotlin中,我想要添加一个equals方法到一个尚未得到equals实现的现有类。

在我的情况下,我想比较两个BooleanArray实例。 如果两个数组a1a2的大小相同,并且所有项都相等,则equals (以及== )应该返回true 。 因此a1[i] === a2[i]对于所有的0 <= i < size

该文档指出可以通过扩展方法定义运算符 :

该函数必须声明为

fun equals(other: Any?): Boolean

或者具有相同参数列表和返回类型的扩展函数。

BooleanArray不提供一个equals方法。

所以我写道:

 fun BooleanArray.equals(other: Any?): Boolean { return ... } 

但是这个扩展被忽略。 当我比较两个BooleanArray

 BooleanArray(0).equals(BooleanArray(0)) 

它不调用扩展方法,因此对于两个不同的实例总是评估为false

文档已经过时,不再可能。 如果你用这个签名声明你的equals扩展名,它永远不会被调用,因为成员函数总是胜过扩展名,并且有一个equals Any的成员函数。 你可以提供你自己的equals的唯一方法是通过重写Any中的成员函数,但是这对于数组来说当然是不可能的。 我建议你尝试使用具有明确定义的equals / hashCode行为而不是数组的列表或其他数据结构。

    Interesting Posts