+-
我正在将我的一些 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)
}
我收到一条错误消息:当我尝试实例化它时,接口MyListener没有构造函数 – 虽然在我看来除了语法之外没有任何改变.我是否误解了Kotlin界面的工作原理?
最佳答案
您的Java代码依赖于SAM转换 – 使用单个抽象方法将lambda自动转换为接口.对于Kotlin中定义的接口,SAM转换为 currently not supported.相反,您需要定义实现接口的匿名对象:
val obj = object : MyInterface {
override fun onLocationMeasured(location: Location) { ... }
}
点击查看更多相关文章
转载注明原文:java – Kotlin:Interface …没有构造函数 - 乐贴网