为什么LiveData比MutableLiveData好?

时间:2019-02-08 21:43:57

标签: android kotlin android-livedata mutablelivedata

在许多示例中,我看到:

 class DataViewModel{
         val data:LivaData<Int>
             get() = _data 

         private val _data = MutableLiveData<Int>()

    }

但更简单地说是这样:

 class DataViewModel{
         val data = MutableLiveData<Int>()

    }

那么,为什么需要这种具有2个字段的更复杂的代码构造?

2 个答案:

答案 0 :(得分:2)

这是一种旨在限制从类外部修改值的实践。

LiveData是只读的。 顾名思义,MutableLiveData允许更改其持有的值。

如果直接公开MutableLiveData(如第二个示例),则任何可以访问data字段的代码也可以修改其持有的值。

暴露从data类外部更改DataViewModel内容的能力可能使调试变得更加困难,并推断出在任何给定时间data的内容来自何处。

答案 1 :(得分:2)

MutableLiveData本质上是一个LiveData,可以公开访问两个用于修改该数据的方法setValue()postValue()

因此,如果您打算修改LiveData的值,则需要MutableLiveData

但是,在编程中,使变量不可变或限制可以修改对象数据的用户的访问是一个常见的概念。如果不需要这样做,您就不想公开修改对象内变量内容的能力。

因此,对于MutableLiveData,我们通常使用getter获取其父表单LiveData

通过仅获取LiveData,我们可以确保访问LiveData对象的用户只能读取存储在其中的值,而不能更改它们。

从某种意义上讲,这只是为什么应该对getter使用私有变量的概念。