Pasando lambda en lugar de interfaz

He creado una interfaz:

interface ProgressListener { fun transfernetworking(bytesUploaded: Long) } 

pero puede usarlo solo como class anónima, no lambda

 dataManager.createAndSubmitSendIt(title, message, object : ProgressListener { override fun transfernetworking(bytesUploaded: Long) { System.out.println(bytesUploaded.toString()) } }) 

Creo que debería ser una posibilidad para replacelo por lambda:

 dataManager.createAndSubmitSendIt(title, message, {System.out.println(it.toString())}) 

Pero recibo un error: no coincide con el tipo; requerido – ProgressListener, found – () -> Unit?

¿Qué estoy haciendo mal?

Como dijo @ zsmb13, las conversiones SAM solo son compatibles con las interfaces Java.

Podría crear una function de extensión para que funcione:

 // Assuming the type of dataManager is DataManager. fun DataManager.createAndSubmitSendIt(title: String, message: String, progressListener: (Long) -> Unit) { createAndSubmitSendIt(title, message, object : ProgressListener { override fun transfernetworking(bytesUploaded: Long) { progressListener(bytesUploaded) } }) } 

Kotlin solo admite conversiones SAM para interfaces Java.

… tenga en count que esta característica solo funciona para la interoperabilidad de Java; como Kotlin tiene types de funciones adecuados, la conversión automática de funciones en implementaciones de las interfaces de Kotlin es innecesaria y, por lo tanto, no está soportada.

– Documentación oficial

Si desea utilizar una lambda en el parámetro, haga que su function tome un parámetro de function en lugar de una interfaz. (Al less por ahora. Apoyar las conversiones de SAM para las interfaces de Kotlin es una discusión en curso, fue una de las posibles características futuras de la transmisión en vivo de Kotlin 1.1).

  • ¿Por qué Kotlin no puede inferir el siguiente argumento lambda (después de la conversión de Java -> Kotlin)?
  • ¿Por qué la variable no se puede inicializar correctamente en la function en línea como en Java?
  • Parámetros de Clase abstracta vs. Lambda
  • Kotlin lambda con varios parameters
  • Kotlin filter lambda array usando el índice de iteración
  • Kotlin - Lista dentro de un filter de list
  • ¿Cuál es el propósito de Lambda's con Receiver?
  • Enlace de datos: el campo Observable con valor lambda no comstack
  • Expresiones de kotlin lambda como parámetro opcional
  • "Lambda con receptor": ¿Qué es esta construcción de Kotlin?
  • Pasar funciones a funciones en Kotlin