我有一个班级
open class Texture
我想定义equals(other: Texture)
运算符
operator fun equals(other: Texture) = ...
但我得到
错误:(129,5)Kotlin:'运营商'修饰符不适用于此功能:必须覆盖''等于()''在任何
这是什么意思?
如果我将其更改为
operator fun equals(other: Any) = ...
意外覆盖,两个声明具有相同的jvm签名
答案 0 :(得分:5)
equals()
operator function is defined in Any
,因此应使用兼容签名覆盖:其参数other
应为Any?
类型,其返回值应为Boolean
或其子类型 (它是最终的):
open class Texture {
// ...
override operator fun equals(other: Any?): Boolean { ... }
}
如果没有the override
modifier,您的函数将与Any::equals
发生冲突,从而意外覆盖。此外,equals()
不能是扩展名(just like toString()
),也不能在界面中覆盖。
在IntelliJ IDEA中,您可以使用 Ctrl + O 覆盖成员,或 Ctrl + 插入生成equals()
+ hashCode()