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

Can I add operators to existing classes?

在 Kotlin 中,我想向现有 class 添加一个 equals 方法,该方法还没有 equals 实现。

就我而言,我想比较两个 BooleanArray 实例。 equals(因此 ==)应该 return true 对于两个数组 a1a2 如果它们具有相同的大小并且如果所有项目是平等的。因此 a1[i] === a2[i] 对于所有 0 <= i < size.

The documentation states that operators can be defined by extension methods:

The function must be declared as

fun equals(other: Any?): Boolean

Or an extension function with the same parameter list and return type.

BooleanArray 没有提供 equals 方法。

所以我写道:

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

但是这个扩展被忽略了。当我比较两个 BooleanArray 时,例如

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

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

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