在Kotlin中,我想将 equals
方法添加到尚未实现 equals
实现的现有类中 .
在我的情况下,我想比较两个 BooleanArray
实例 . 对于两个数组 a1
和 a2
, equals
(因此 ==
)应返回 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 回答
文档已过时,不再可能 . 如果使用该签名声明
equals
扩展名,则永远不会调用它,因为member functions always win超过扩展名,并且Any
中有成员函数equals
. 您可以提供自己的equals
的唯一方法是从Any
覆盖该成员函数,但这对于数组来说当然是不可能的 . 我建议你尝试使用明确定义的equals
/hashCode
行为而不是数组的列表或其他数据结构 .