为什么Kotlin双重等于未找到.equals方法?

时间:2019-06-18 16:19:12

标签: kotlin spring-batch

以下kotlin代码无法编译。它声称​​没有可用的方法'equals(Any?):Boolean'

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

ExitStatus(Spring Batch中的Java类)确实具有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 :(得分:0)

这是因为,当kotlin看到运算符==时,它仅查找.equals(other: Any?): Boolean方法,而没有其他重载。如果类型不完全具有此重载,则在使用==运算符时将找不到该重载。您的类型似乎还有其他一些重载,例如.equals(other: ExitStatus),在您显式调用它时会使用它。

More on Kotlin operator overloading.