postDelayed()
принимает Runnable
в качестве первого параметра.blank_fields_error.visibility = View.INVISIBLE
не является Runnable
.Это оператор присваивания.
Поскольку Runnable
- это интерфейс, определенный в Java, и он имеет единственный метод, вы можете передать лямбда-выражение Kotlin в качестве первого параметра, и компилятор Kotlin преобразует его вRunnable
для вас (см. «Преобразования SAM» в документации Kotlin ).
Итак, в то время как blank_fields_error.visibility = View.INVISIBLE
является присваиванием, {blank_fields_error.visibility = View.INVISIBLE}
является лямбда-выражением, которое происходит свыполнить назначение.Вы можете передать лямбда-выражение в postDelayed()
.
Для мест, где в Java вы можете использовать анонимные внутренние классы, где расширяемый интерфейс или класс имеет более одного метода, в Kotlin вы можете создатьАнонимный объект:
someField.addTextChangedListener(object : TextWatcher {
fun afterTextChanged(s: Editable) {
TODO()
}
fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
TODO()
}
fun onTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
TODO()
}
})