Implementación de interfaz de retorno con Kotlin y lambda

Tengo esta interfaz simple:

interface ValidationBehavior { fun onValidated() } 

Esta interfaz se usa en una function de una class:

 private enum class BehaviorEnum { IDLE, NAVIGATEBACK } private fun getBehavior(payloadBehavior: String) : ValidationBehavior { when(BehaviorEnum.valueOf(payloadBehavior)) { BehaviorEnum.IDLE -> return object: ValidationBehavior { override fun onValidated() { // do some stuff } } } } 

Mi pregunta es: ¿hay alguna manera de simplificar la statement de devolución con un lambda? Intento algunas cosas como esta pero no funciona:

 return ValidationBehavior{ () -> //do some stuff } 

No, las interfaces escritas en Kotlin no se pueden crear instancias con una lambda, que solo funciona para interfaces escritas en Java. Si desea utilizar lambdas en Kotlin, use el tipo funcional, como en su caso () -> Unit lugar de ValidationBehavior .

Alternativamente, escriba un método que tome un tipo funcional y lo envuelva en un ValidationBehavior :

 interface ValidationBehavior { companion object { inline operator fun invoke(fn: () -> Unit) = object: ValidationBehavior { override fun onValidated() = fn() } } fun onValidated() } private fun getBehavior(payloadBehavior: String) : ValidationBehavior { when(BehaviorEnum.valueOf(payloadBehavior)) { BehaviorEnum.IDLE -> return ValidationBehavior { /* do stuff */ } } } 
  • ¿Cómo funciona el generador htmlx de kotlin exactamente debajo del capó?
  • Kotlin lambda con Interface como argumento
  • ¿Cómo escribir lambdas con generics en kotlin?
  • ¿Es posible tener extensiones de function en lambdas?
  • Anulación de múltiples methods de interfaz en expresiones Kotlin lambda
  • Kotlin: function genérica como tipo de retorno?
  • Variable de lanzamiento inteligente en la solución de lambda kotlin
  • ¿Cómo omitir los parameters lambda en Kotlin?
  • cómo descartar DialogFragment de lambda especificado en el llamador Kotlin
  • ¿Es posible ocultar variables del cierre de lambda?
  • Java Lambda para Kotlin