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

Какие стандартные делегаты ты знаешь?

Sobes Copilot

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

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

sobes.tech AI

  • by lazy — используется для отложенной инициализации свойства. Значение вычисляется при первом обращении к свойству и кешируется.
    val lazyValue: String by lazy {
        println("initialized") // Выполнится только при первом обращении
        "Hello"
    }
    
  • Delegates.observable — делегат, который позволяет выполнять действие при каждом изменении значения свойства.
    import kotlin.properties.Delegates
    
    var name: String by Delegates.observable("initial value") {
        prop, old, new ->
        println("Value changed for ${prop.name} from $old to $new")
    }
    
  • Delegates.vetoable — делегат, который позволяет перехватить изменение значения свойства и отменить его на основе некоторого условия.
    import kotlin.properties.Delegates
    
    var age: Int by Delegates.vetoable(10) {
        prop, old, new ->
        new >= 0 // Разрешаем только неотрицательные значения
    }