为什么我不能在kotlin中使用lambda接口?
看,我有一个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{})
仍然错误:接口单一没有结构!
尽管下面的代码工作:
JavaReceiveSingle.useSingle(object :Single{ override fun aa() {} })
但是为什么我不能使用lambda作为kotlin接口?
目前,Kotlin中定义的接口不支持SAM转换 。 YouTrack中存在一个问题,但是目前我建议使用functiontypes而不是单一方法的接口。 如果你想要他们有一个合适的名字,你可以使用别名 ,但不要过度使用它们。 在许多情况下,functiontypes和好的方法/variables名称是很有表现力的。