在MVVM中應該都會用上LiveData,然而大多都會建議你在viewModel中宣告這樣,不要讓可被改變的liveData對外可被修改
private val _dataChangeLiveData = MutableLiveData<String>()
你會說那封裝後外面UI該怎麼訂閱他?
所以官方範例會在建議你宣告一個public且不可變的liveData對外
val dataChangeLiveData: LiveData = _dataChangeLiveData
所以放在一起就會變成
private val _dataChangeLiveData = MutableLiveData<String>()
val dataChangeLiveData: LiveData = _dataChangeLiveData
這對就永遠變成一組了,那你有想過,他們的關係是什麼呢?
簡單來猜應該可以知道
MutableLiveData : LiveData
然而實際上你會想說,那mutableLiveData是做了什麼事情才會讓liveData value可以被修改呢?
來看看source Code吧
可以看到他就是這麼簡單而已,覆寫了postValue變成public
這時候來看一下liveData.java的postValue是長什麼樣子
如同想像的,他本身就是一個protect的function,而MutableLiveData他們是同一個packageName,所以自然是可以透過繼承覆寫後去呼叫保護的方法
以上透過這樣的察看,就可以更清楚MutableLiveData與LiveData之間的關係是什麼了。