小编典典

Kotlin:接口......没有构造函数

all

我正在将我的一些 Java 代码转换为 Kotlin,但我不太了解如何实例化在 Kotlin 代码中定义的接口。例如,我有一个接口(在 Java
代码中定义):

public interface MyInterface {
    void onLocationMeasured(Location location);
}

然后在我的 Kotlin 代码中进一步实例化这个接口:

val myObj = new MyInterface { Log.d("...", "...") }

它工作正常。但是,当我将 MyInterface 转换为 Kotlin 时:

interface MyInterface {
    fun onLocationMeasured(location: Location)
}

我收到一条错误消息:Interface MyListener does not have constructors当我尝试实例化它时 -
尽管在我看来,除了语法之外什么都没有改变。我是否误解了 Kotlin 中的接口是如何工作的?


阅读 130

收藏
2022-08-27

共1个答案

小编典典

您的 Java 代码依赖于 SAM 转换 - 将 lambda 自动转换为具有单个抽象方法的接口。Kotlin
中定义的接口目前不支持SAM
转换。相反,您需要定义一个实现接口的匿名对象:

val obj = object : MyInterface {
    override fun onLocationMeasured(location: Location) { ... }
}
2022-08-27