Как наблюдать за ссылочной переменной? - PullRequest
0 голосов
/ 23 марта 2020

У меня есть класс ниже, который обновляет переменную data. Как я могу наблюдать, когда эта переменная изменяется?

object Manager {

    private var data: Type = B()

    fun doWork{
       while(active) {
           if(conditionA) 
             data = A()
           else if(conditionB)
             data = B()
       }
    }

    fun getData(): Flow<Type>
}

interface Type {
}

Некоторые классы, которые реализуют интерфейс.

class A: Type {}
class B: Type {}

Я хочу иметь возможность наблюдать эти изменения без использования LiveData или чего-либо еще это Experimental. Как я могу позволить другим областям моего кода наблюдать переменную data?


Я знаю, что есть BroadcastChannel, но я не могу использовать его, потому что он экспериментальный.

1 Ответ

0 голосов
/ 23 марта 2020

Вы можете использовать слушателя и встроенный Kotlin делегат:

object Manager {

    var dataListeners = ArrayList<(Type) -> Unit>()

    // fires off every time value of the property changes
    private var data: Type by Delegates.observable(B()) { property, oldValue, newValue ->

        dataListeners.forEach { 
            it(newValue)
        }
    }

    fun doWork{
       while(active) {
           if(conditionA) 
             data = A()
           else if(conditionB)
             data = B()
       }
    }
}
...