为什么我能';kotlin的接口是否使用lambda?
看,我有一个Java类:为什么我能';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接口:
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转换了。那么,在这种情况下,建议使用函数类型来替换传统的内部匿名类?如果是这样,我就明白了