定义equals()运算符的问题

ele*_*ect 10 operator-overloading kotlin

我上课了

open class Texture
Run Code Online (Sandbox Code Playgroud)

我想定义equals(other: Texture)运算符

operator fun equals(other: Texture) = ...

但我明白了

错误:(129,5)Kotlin:'operator'修饰符不适用于此函数:必须在Any中覆盖''equals()''

这是什么意思?

如果我改变它

operator fun equals(other: Any) = ...

意外覆盖,两个声明具有相同的jvm签名

hot*_*key 7

equals()操作者的功能中定义Any,因此它应该与兼容签名被重写:其参数other应类型的Any?,并且其返回值应该是Boolean 或它的亚型 (它的最终):

open class Texture {
    // ...

    override operator fun equals(other: Any?): Boolean { ... }
}
Run Code Online (Sandbox Code Playgroud)

如果没有override修改,你的功能将与交锋Any::equals,因此意外覆盖.此外,equals()不能是扩展(就像toString()),它不能在接口中覆盖.

在IntelliJ IDEA中,您可以使用Ctrl+ O来覆盖成员,或使用Ctrl+ Insert来生成equals()+hashCode()