看,我有一个Java类:
public final class JavaReceiveSingle {
public static void useSingle(Single single) {
single.doSth();
}
public static void useSingle2(SingleInterface singleInterface) {
singleInterface.doSth();
}
}
Java接口:
public interface SingleInterface {
void doSth();
}
kotlin界面:
interface Single {
fun doSth()
}
现在我可以在kotlin类中使用lambda,如:
JavaReceiveSingle.useSingle2({})
但如果我想对kotlin界面做同样的事情:
JavaReceiveSingle.useSingle({})
IDE将显示错误:必填:单身!找到:() - >单位
如果我指定像:
JavaReceiveSingle.useSingle(Single{})
仍然错误:Interface Single没有构造!
虽然以下代码有效:
JavaReceiveSingle.useSingle(object :Single{
override fun aa() {}
})
但为什么我不能将lambda用作kotlin接口?
答案 0 :(得分:1)
目前,Kotlin中定义的接口不支持SAM conversion。在YouTrack中有一个问题,但目前我建议使用功能类型而不是单方法接口。如果您希望它们具有正确的名称,您可以使用type aliases,但不要过度使用它们。在许多情况下,功能类型以及良好的方法/变量名称足够表达。