Почему двойное равенство Котлина не находит метод .equals? - PullRequest
2 голосов
/ 18 июня 2019

Приведенный ниже код котлина не компилируется.Он утверждает, что Нет метода 'равно (Любой?): Boolean' доступно

override fun afterJob(jobExecution: JobExecution) {
            if (jobExecution.exitStatus == ExitStatus.COMPLETED) {
               //do stuff
            }
}

ExitStatus (класс Java из пакета Spring) имеет метод equals.Смотрите здесь: https://docs.spring.io/spring-batch/4.1.x/api/org/springframework/batch/core/ExitStatus.html

public class ExitStatus
extends java.lang.Object
implements java.io.Serializable, java.lang.Comparable<ExitStatus>

Если я изменю == на .equals, это работает.Почему это так?

1 Ответ

0 голосов
/ 18 июня 2019

Это потому, что когда kotlin видит оператор ==, он ищет только метод .equals(other: Any?): Boolean, а не любые другие перегрузки.Если тип не имеет именно эту перегрузку, он не будет найден при использовании оператора ==.Кажется, у вашего типа есть другая перегрузка, например, .equals(other: ExitStatus), которая используется, когда вы вызываете ее явно.

Подробнее о перегрузке оператора Kotlin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...