首页 > 解决方案 > 为什么 Kotlin double equals 找不到 .equals 方法?

问题描述

下面的 kotlin 代码无法编译。它声称没有方法'等于(任何?):布尔'可用

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 它可以工作。这是为什么?

标签: kotlinspring-batch

解决方案


那是因为当 kotlin 看到 operator 时==,它只寻找.equals(other: Any?): Boolean方法,而不是任何其他重载。如果该类型没有恰好有这个重载,则在使用==运算符时将找不到它。您的类型似乎还有其他重载,例如.equals(other: ExitStatus),当您显式调用它时会使用它。

更多关于 Kotlin 运算符重载的信息。


推荐阅读