为什么我不能在kotlin上使用lambda作为接口?

时间:2017-06-02 08:05:41

标签: lambda kotlin

看,我有一个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接口?

1 个答案:

答案 0 :(得分:1)

目前,Kotlin中定义的接口不支持SAM conversion。在YouTrack中有一个问题,但目前我建议使用功能类型而不是单方法接口。如果您希望它们具有正确的名称,您可以使用type aliases,但不要过度使用它们。在许多情况下,功能类型以及良好的方法/变量名称足够表达。