为什么我能';kotlin的接口是否使用lambda?

为什么我能';kotlin的接口是否使用lambda?,lambda,kotlin,Lambda,Kotlin,看,我有一个Java类: public final class JavaReceiveSingle { public static void useSingle(Single single) { single.doSth(); } public static void useSingle2(SingleInterface singleInterface) { singleInterface.doSth(); } } Java接口:

看,我有一个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();
}
interface Single {
    fun doSth()
}
JavaReceiveSingle.useSingle({})
kotlin接口:

public interface SingleInterface {
    void doSth();
}
interface Single {
    fun doSth()
}
JavaReceiveSingle.useSingle({})
现在我可以在kotlin类中使用lambda,如:

JavaReceiveSingle.useSingle2({})
但如果我想对kotlin接口做同样的事情:

public interface SingleInterface {
    void doSth();
}
interface Single {
    fun doSth()
}
JavaReceiveSingle.useSingle({})
IDE将显示错误:必需:单个!找到:()->单位

如果我指定了单件式:

JavaReceiveSingle.useSingle(Single{})
仍然错误:单个接口没有构造

尽管以下代码有效:

JavaReceiveSingle.useSingle(object :Single{
    override fun aa() {}
})

但是为什么我不能将lambda用于kotlin接口呢?

目前,kotlin中定义的接口不支持lambda。在中有一个问题,但目前我建议使用函数类型而不是单一方法接口。如果你想让他们有一个合适的名字,你可以使用,但不要过度使用。在许多情况下,一个函数类型加上好的方法/变量名就足够表达了。

Kotlin有函数类型,例如。g
()->Unit
是一个不接受任何参数并返回Unit(无值)的函数。这样,就不需要函数接口和SAM转换了。那么,在这种情况下,建议使用函数类型来替换传统的内部匿名类?如果是这样,我就明白了