Уменьшите это до простой лямбды - PullRequest
0 голосов
/ 15 июня 2019

Я хотел бы упростить этот код, уменьшив его до лямбды.Интерфейс имеет только одну функцию.Я не уверен, как заменить переопределенную часть кода простым лямбда-выражением:

interface ITextWatcher {
    fun onTextChanged(text: String) {

    }
}

val textChangeHandler = object: ITextWatcher {
    override fun onTextChanged(text: String) 
         var t = text
    }
}

Я ищу что-то вроде этого:

val textChangeHandler = object: ITextWatcher {text ->

}

Но это победилоне компилируется.

1 Ответ

1 голос
/ 15 июня 2019

Синтаксис val textChangeHandler = ITextWatcher {text -> ... }, но он не работает для интерфейсов, объявленных в Kotlin, только для интерфейсов Java (по крайней мере, на данный момент).

Используйте (String) -> Unit напрямую. Или объявите функцию для преобразования одного в другое:

inline fun ITextWatcher(crossinline f: (String) -> Unit) = object : ITextWatcher {
    override fun onTextChanged(text: String) {
         f(text)
    }
}

val textChangeHandler = ITextWatcher {text -> ... }

если хочешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...