我可以添加运算符到现有的类吗?
在Kotlin中,我想要添加一个equals
方法到一个尚未得到equals
实现的现有类。
在我的情况下,我想比较两个BooleanArray
实例。 如果两个数组a1
和a2
的大小相同,并且所有项都相等,则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
行为而不是数组的列表或其他数据结构。