我正在将我的一些 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 中的接口是如何工作的?
Interface MyListener does not have constructors
您的 Java 代码依赖于 SAM 转换 - 将 lambda 自动转换为具有单个抽象方法的接口。Kotlin 中定义的接口目前不支持SAM 转换。相反,您需要定义一个实现接口的匿名对象:
val obj = object : MyInterface { override fun onLocationMeasured(location: Location) { ... } }