为什么 LiveData 优于 MutableLiveData?
Why does LiveData better than MutableLiveData?
在许多样本中我看到:
class DataViewModel{
val data:LivaData<Int>
get() = _data
private val _data = MutableLiveData<Int>()
}
但更简单的看起来像这样:
class DataViewModel{
val data = MutableLiveData<Int>()
}
那么,为什么需要这种包含 2 个字段的更复杂的代码构造?
这是一种旨在限制从 class 外部修改值的做法。
LiveData
是只读的。
MutableLiveData
,顾名思义,允许一个人改变它持有的价值。
如果您直接公开 MutableLiveData
,就像在您的第二个示例中一样,任何可以访问该 data
字段的代码也可以修改它包含的值。
公开从外部更改 data
内容的能力 DataViewModel
class 可能会更难调试和推断 data
内容的来源从任何给定时间。
MutableLiveData
本质上是一个 LiveData
,可以 public 访问两种方法 setValue()
和 postValue()
来修改数据。
因此,如果您打算修改 LiveData 的值,则需要 MutableLiveData
。
但是,在编程中,使您的变量不可变或限制那些可以修改对象数据的人的访问是一个常见的概念。如果没有必要,您不希望公开修改对象中变量内容的能力。
因此,对于MutableLiveData
,我们通常使用getter来获取它的父表单,即LiveData
。
通过只获取LiveData
,我们可以确保那些访问LiveData
对象的人只能读取存储在其中的值而不能更改它们。
从某种意义上说,这只是为什么要将私有变量与getter一起使用的概念。
在许多样本中我看到:
class DataViewModel{
val data:LivaData<Int>
get() = _data
private val _data = MutableLiveData<Int>()
}
但更简单的看起来像这样:
class DataViewModel{
val data = MutableLiveData<Int>()
}
那么,为什么需要这种包含 2 个字段的更复杂的代码构造?
这是一种旨在限制从 class 外部修改值的做法。
LiveData
是只读的。
MutableLiveData
,顾名思义,允许一个人改变它持有的价值。
如果您直接公开 MutableLiveData
,就像在您的第二个示例中一样,任何可以访问该 data
字段的代码也可以修改它包含的值。
公开从外部更改 data
内容的能力 DataViewModel
class 可能会更难调试和推断 data
内容的来源从任何给定时间。
MutableLiveData
本质上是一个 LiveData
,可以 public 访问两种方法 setValue()
和 postValue()
来修改数据。
因此,如果您打算修改 LiveData 的值,则需要 MutableLiveData
。
但是,在编程中,使您的变量不可变或限制那些可以修改对象数据的人的访问是一个常见的概念。如果没有必要,您不希望公开修改对象中变量内容的能力。
因此,对于MutableLiveData
,我们通常使用getter来获取它的父表单,即LiveData
。
通过只获取LiveData
,我们可以确保那些访问LiveData
对象的人只能读取存储在其中的值而不能更改它们。
从某种意义上说,这只是为什么要将私有变量与getter一起使用的概念。