Реализация интерфейса возврата с помощью 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
Преобразование карт в список карт в Котлине Неразрешенная ссылка async в Котлине Объясните, почему показано предупреждение. Не отмечен ли источник-источник.readArrayList (data !!. JavaClass.classLoader) как ArrayList <Data>? Проблемы компилятора kotlin для неразрешенного класса Нужно ли знать kotlin, чтобы получить сертификацию AAD (Associate Android Developer)? Котлин не работает над Android Studio Как код Kotlin запускается в приложении для Android и как он отличается от Java? Вызов универсального метода Java varargs от Kotlin IllegalStateException: активность была уничтожена (уровень API <21) Firebase SDK в Kotlin – onChildChanged не стреляет в первого ребенка в списке Использование LiveData с привязкой данных Как реализовать проверенный конструктор в Котлине? Резервный SAM-конструктор нельзя удалить для объявленной функции Kotlin, но работает над объявленной Java-функцией Firebase: повторная проверка подлинности Google Auth ERROR (недопустимый id_token в IdP) Можно ли использовать Allatori в исходном коде Kotlin?