¿Por qué no puedo usar lambda para la interfaz en kotlin?

mira, tengo una class de Java:

public final class JavaReceiveSingle { public static void useSingle(Single single) { single.doSth(); } public static void useSingle2(SingleInterface singleInterface) { singleInterface.doSth(); } } 

una interfaz de Java:

 public interface SingleInterface { void doSth(); } 

una interfaz de kotlin:

 interface Single { fun doSth() } 

Ahora puedo usar lambda en una class de kotlin como:

 JavaReceiveSingle.useSingle2({}) 

Pero si quiero hacer lo mismo con la interfaz de Kotlin:

 JavaReceiveSingle.useSingle({}) 

IDE mostrará el error: Obligatorio: ¡Único! Encontrado: () -> Unidad

Y si especifico solo como:

 JavaReceiveSingle.useSingle(Single{}) 

Aún error: ¡Interface Single no tiene construcciones!

Aunque el siguiente código funciona:

 JavaReceiveSingle.useSingle(object :Single{ override fun aa() {} }) 

Pero ¿por qué no puedo usar lambda para una interfaz de Kotlin?

Actualmente, la conversión SAM no es compatible con las interfaces definidas en Kotlin. Hay un problema para eso en YouTrack , pero actualmente recomendaría usar types funcionales en lugar de interfaces de método único. Si desea que tengan un nombre propio, puede usar alias de tipo , pero no los use en exceso. En muchos casos, un tipo funcional junto con buenos nombres de método / variable es lo suficientemente expresivo.

  • nulo o vacío lambda como valor pnetworkingeterminado
  • Kotlin - Cómo recursivamente llamar a una function lambda
  • Kotlin: lambda nunca comstack
  • Función anónima asincrónica en Kotlin? (expresiones lambda)
  • Kotlin: ¿usar una lambda en lugar de una interfaz funcional?
  • Kotlin y Jack no son compatibles (Android Studio 2.3.2)
  • Expresiones de kotlin lambda como parámetro opcional
  • Tipo de function de Kotlin en su lugar interfaz funcional lambda
  • Kotlin: ¿Para qué se llaman los arguments lambda?
  • Kotlin: cuándo y cómo se deben usar las expresiones Lambda
  • Kotlin: lambdas seguros (sin pérdida de memory)?