我正在将我的一些 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 中的工作方式?
原文由 Aleph Aleph 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的 Java 代码依赖于 SAM 转换——使用单个抽象方法将 lambda 自动转换为接口。 Kotlin 中定义的接口 目前不支持 SAM 转换。相反,您需要定义一个实现该接口的匿名对象: