为什么 LiveData 比 MutableLiveData 好?

Ser*_*aka 3 android kotlin android-livedata mutablelivedata

在许多样本中,我看到:

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

         private val _data = MutableLiveData<Int>()

    }
Run Code Online (Sandbox Code Playgroud)

但更简单的看起来像这样:

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

    }
Run Code Online (Sandbox Code Playgroud)

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

jen*_*sck 5

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

LiveData是只读的。 MutableLiveData,顾名思义,允许改变它所持有的值。

如果MutableLiveData直接公开 a ,就像在第二个示例中一样,任何可以访问该data字段的代码也可以修改它所持有的值。

公开data从外部DataViewModel 类更改内容的能力可能会使调试和推理data在任何给定时间的内容来自何处变得更加困难。


Jac*_*key 5

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

因此,MutableLiveData如果您计划修改 LiveData 的值,则需要。

然而,在编程中,使变量不可变或限制那些可以修改对象数据的人的访问是一个常见的概念。如果没有必要,您不会希望公开修改对象内变量内容的能力。

因此,对于MutableLiveData,我们通常使用 getter 来获取它的父表单,即LiveData

通过获取 only LiveData,我们可以确保访问该对象的人LiveData只能读取其中存储的值,而无法更改它们。

从某种意义上说,这就是为什么应该将私有变量与 getter 一起使用的概念。