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