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 */ } } } 
  • Anulación de múltiples methods de interfaz en expresiones Kotlin lambda
  • Pasar funciones a funciones en Kotlin
  • Función para expresión lambda
  • Pasando lambda en lugar de interfaz
  • Kotlin lambda con Interface como argumento
  • Tienda lambda en una variable en kotlin
  • ¿Cómo omitir los parameters lambda en Kotlin?
  • Kotlin genera class interna para lambda
  • Configuración de oyentes de Android en Kotlin: uso del retorno en lambdas
  • ¿Puedo transformar cadena en expresión de plantilla o expresión lambda en kotlin?
  • Tratando de entender el ejemplo de Kotlin