我可以向现有 类 添加运算符吗?
Can I add operators to existing classes?
在 Kotlin 中,我想向现有 class 添加一个 equals
方法,该方法还没有 equals
实现。
就我而言,我想比较两个 BooleanArray
实例。 equals
(因此 ==
)应该 return true
对于两个数组 a1
和 a2
如果它们具有相同的大小并且如果所有项目是平等的。因此 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
行为的列表或其他数据结构,而不是数组。
在 Kotlin 中,我想向现有 class 添加一个 equals
方法,该方法还没有 equals
实现。
就我而言,我想比较两个 BooleanArray
实例。 equals
(因此 ==
)应该 return true
对于两个数组 a1
和 a2
如果它们具有相同的大小并且如果所有项目是平等的。因此 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
行为的列表或其他数据结构,而不是数组。