3

在许多样本中,我看到:

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

         private val _data = MutableLiveData<Int>()

    }

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

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

    }

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

4

2 回答 2

6

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

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

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

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

于 2019-02-08T22:13:06.603 回答
4

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

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

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

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

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

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

于 2019-02-08T22:16:07.160 回答