Реализация интерфейса возврата с помощью Kotlin и лямбда

У меня есть этот простой интерфейс:

interface ValidationBehavior { fun onValidated() } 

Этот интерфейс используется в одной функции класса:

 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 } } } } 

Мой вопрос: есть ли способ упростить оператор return с помощью лямбда? Я пробую кое-что вроде этого, но это не работает:

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

Нет, интерфейсы, написанные в Kotlin, не могут быть созданы с помощью лямбда, что работает только для интерфейсов, написанных на Java. Если вы хотите использовать лямбда в Котлине, используйте функциональный тип, например, в вашем случае () -> Unit вместо ValidationBehavior .

Кроме того, напишите метод, который использует функциональный тип и завершает его в 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 */ } } } 
Intereting Posts
Не удалось написать JSON: не удалось десериализовать; вложенное исключение Ошибка базы данных комнаты с классом данных Kotlin Kotlin типа безопасный строитель DSLs, безопасность для самой внешней функции Обращение к инфиксному логическому результату kotlin Переменная не обновляется после декларации lateinit, неспособная вернуться Невозможно посмотреть переменную Kotlin в студии Android Динамическая оценка шаблонных строк в Котлине Kotlin Kapt failing – видит только источники уровня авиалинии aproid Kotlin / anko несколько асинхронных задач Неопределенная ссылка для Holdr в Котлине Какова альтернатива URLEncodedUtils.format (params, «utf-8») в котлин? kotlin неразрешенная ссылка KDoc, но IntelliJ не любит импорт, который его исправляет Как экспортировать функции Kotlin в Javascript с правильным именем произошел сбой при попытке использовать намерение отправлять электронную почту (Kotlin) Отключить диалог на задней клавише