定义equals()运算符的问题

我有一堂课

open class Texture 

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

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

但是我明白了

错误:(129,5)Kotlin:“运算符”修饰符不适用于此函数:必须覆盖Any中的“equals()”

这是什么意思?

如果我改变了

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

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

Any定义了equals()运算符函数 ,所以应该用一个兼容的签名覆盖它: other参数应该是Any?类型的Any? ,它的返回值应该是Boolean 或它的子类型 (它是最终的)

 open class Texture { // ... override operator fun equals(other: Any?): Boolean { ... } } 

如果没有override修饰符 ,你的函数将与Any::equals发生冲突,因此意外覆盖。 此外, equals()不能是扩展( 就像toString() ),并且不能在接口中被覆盖。

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