定义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()