Делегирование классов позволяет классу реализовать интерфейс, автоматически передавая все вызовы методов другому объекту. Вместо того чтобы вручную переопределять каждый метод, Kotlin генерирует весь шаблонный код за тебя.
interface Printer {
fun print()
}
class RealPrinter : Printer {
override fun print() = println("Printing...")
}
class SmartPrinter(p: Printer) : Printer by p
Здесь SmartPrinter делегирует все вызовы интерфейса Printer переданному объекту p, используя ключевое слово by. Это способствует композиции вместо наследования.
Делегирование свойств позволяет свойству передать свою логику get и set объекту-делегату, который реализует операторы getValue и setValue.
val name: String by lazy { "Kotlin" }
lazy — вычисляет значение только при первом обращенииobservable — срабатывает каждый раз, когда значение изменяетсяby map — хранит значения свойств внутри MapbyКлючевое слово by — это основной механизм, который связывает оба типа делегирования:
lazy и observable покрывают самые распространённые паттерны из коробкиПри делегировании класса в Kotlin ключевое слово by автоматически генерирует методы-обёртки, которые делегируют все вызовы методов интерфейса предоставленному объекту, избавляя от необходимости переопределять методы вручную.
Новый — ещё не проверен сообществом
Вы