为什么我不能在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名称是很有表现力的。