У меня есть этот простой интерфейс:
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 */ } } }