2
看,我有一个Java类:为什么我不能使用lambda作为kotlin的接口?
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.useSingle2({})
但是,如果我想要做同样的事情科特林接口:
JavaReceiveSingle.useSingle({})
IDE会显示错误:要求:单!发现:() - >单位
,如果我指定单,如:
JavaReceiveSingle.useSingle(Single{})
还是错误:接口单没有结构!
虽然下面的代码工作:
JavaReceiveSingle.useSingle(object :Single{
override fun aa() {}
})
但为什么我不能为科特林接口使用拉姆达?
Kotlin具有功能类型, G。 '() - > Unit'是一个不接受参数并返回Unit(无值)的函数。这样,就不需要功能接口和SAM转换。 –
那么在这种情况下,推荐使用函数类型来取代传统的内部匿名类?如果是这样,那么我明白了 – user2699165