定义equals()运算符的问题

时间:2016-10-29 17:09:53

标签: operator-overloading kotlin

我有一个班级

open class Texture

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

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

但我得到

  

错误:(129,5)Kotlin:'运营商'修饰符不适用于此功能:必须覆盖''等于()''在任何

这是什么意思?

如果我将其更改为

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

  

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

1 个答案:

答案 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()