НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
210 of 1310 menu

Класс Observable

Класс Observable позволяет создать свойство, которое вызывает обработчик при каждом изменении значения. Обработчик получает старое и новое значение свойства. Используется для реализации реактивного программирования.

Импорт

import kotlin.properties.ObservableProperty import kotlin.properties.Delegates

Синтаксис

var variableName: Type by Delegates.observable(initialValue) { property, oldValue, newValue -> // handler code }

Пример

Создадим наблюдаемое свойство count типа Int с начальным значением 0:

var count: Int by Delegates.observable(0) { property, oldValue, newValue -> println("Property ${property.name} changed from $oldValue to $newValue") } count = 5 count = 10

Результат выполнения кода:

Property count changed from 0 to 5 Property count changed from 5 to 10

Пример

Создадим наблюдаемое свойство для строки с проверкой на пустое значение:

var userName: String by Delegates.observable("") { _, oldValue, newValue -> if (newValue.isNotEmpty()) { println("Username changed from '$oldValue' to '$newValue'") } else { println("Username cannot be empty") } } userName = "John" userName = "" userName = "Alice"

Результат выполнения кода:

Username changed from '' to 'John' Username cannot be empty Username changed from '' to 'Alice'

Пример

Наблюдаемое свойство для массива чисел:

var numbers: IntArray by Delegates.observable(intArrayOf()) { _, oldValue, newValue -> println("Array changed from ${oldValue.contentToString()} to ${newValue.contentToString()}") } numbers = intArrayOf(1, 2, 3) numbers = intArrayOf(4, 5, 6, 7)

Результат выполнения кода:

Array changed from [] to [1, 2, 3] Array changed from [1, 2, 3] to [4, 5, 6, 7]

Пример

Использование наблюдаемого свойства в классе:

class User { var age: Int by Delegates.observable(0) { _, oldValue, newValue -> println("Age changed from $oldValue to $newValue") } } val user = User() user.age = 25 user.age = 30

Результат выполнения кода:

Age changed from 0 to 25 Age changed from 25 to 30

Смотрите также

  • класс Vetoable,
    который позволяет отклонять изменения свойства
  • класс Lazy,
    который предоставляет ленивую инициализацию свойства
  • интерфейс MutableList,
    который представляет изменяемый список элементов
  • класс ArrayList,
    который реализует динамический массив
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить