Функциональный интерфейс в Kotlin
Иногда блок кода нужно передать как значение с
именованным типом. Обычный интерфейс с одним
методом для этого подходит, но запись через
object получается длинной.
Ключевое слово fun interface помечает
интерфейс с ровно одной абстрактной операцией.
Такой тип называют SAM - single abstract method:
fun interface OnTick {
fun run()
}
Пока блок передают явным объектом, который реализует этот метод. Компилятор проверяет тип так же строго, как у обычного интерфейса:
fun main() {
val tick: OnTick = object : OnTick {
override fun run() {
println("tick")
}
}
tick.run()
}
Тот же интерфейс можно хранить в коллекции или
передавать в функцию, которая ждет OnTick.
Объект создается один раз, а вызов метода
остается коротким:
fun play(action: OnTick) {
action.run()
}
fun main() {
val tick = object : OnTick {
override fun run() {
println("play")
}
}
play(tick)
}
Объявите fun interface OnPing с
методом fire без параметров. Создайте
объект через object : OnPing, который
выводит "ping", и вызовите fire.
Напишите функцию, которая принимает OnPing
и один раз вызывает его метод. Передайте свой
объект и проверьте вывод в main.