Назад к вопросам
Middle
68
questionbank

Какие типы делегатов существуют в Kotlin?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

  1. Делегаты свойств (Property Delegates): Позволяют переиспользовать общую логику получения/установки значений свойств. Примеры:

    • lazy: Ленивая инициализация свойства.
    • observable: Уведомляет об изменении значения свойства.
    • vetoable: Позволяет отменить изменение значения свойства.
    • Свойства, хранящиеся в Map.
    // Ленивая инициализация
    val lazyValue: String by lazy {
        println("Вычисление lazyValue...")
        "Привет"
    }
    
    // Observable свойство
    var name: String by Delegates.observable("initial value") {
        prop, old, new ->
        println("$old -> $new")
    }
    
  2. Делегаты интерфейсов (Delegating Implementation): Позволяют передать реализацию интерфейса другому объекту. Это паттерн "декоратор".

    interface Base {
        fun print()
    }
    
    class BaseImpl(val x: Int) : Base {
        override fun print() {
            print(x)
        }
    }
    
    class Derived(b: Base) : Base by b // Делегирование реализации интерфейса Base