首页 文章

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

提问于
浏览
1

在Kotlin中,我想将 equals 方法添加到尚未实现 equals 实现的现有类中 .

在我的情况下,我想比较两个 BooleanArray 实例 . 对于两个数组 a1a2equals (因此 == )应返回 true ,如果它们具有相同的大小并且所有项目都相同 . 因此 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 回答

  • 4

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

相关问题