Задачи определения оператора equals()

у меня есть класс

open class Texture

и я хотел бы определить equals(other: Texture) оператор

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

но я

Error: (129, 5) Kotlin: модификатор "operator" неприменим к этой функции: должен переопределять "equals ()" в любом

что это значит?

если я изменю это на

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

случайное переопределение, два объявления имеют одинаковый jvm подпись

1 ответов


на equals() функция оператора определена в Any, поэтому он должен быть переопределен совместимой сигнатурой: его параметр other должно иметь тип Any?, и ее возвращаемое значение должно быть Boolean или его подтипа (конец):

open class Texture {
    // ...

    override operator fun equals(other: Any?): Boolean { ... }
}

без the override модификатор ваша функция будет столкновение с Any::equals, следовательно, случайное переопределение. Кроме того,equals() не может быть продолжением (как toString()), и его нельзя переопределить в интерфейсе.

в IntelliJ IDEA вы можете использовать Ctrl+O для переопределения члена или Ctrl+вставить для создания equals()+hashCode()