为什么不使用瓦尔类型的mutableLiveData作为var类型的替代?
可以在瓦尔类型上设置,这不是一个违规吗?
比如说
1.瓦尔类型示例
class LoadDetailViewModel : ViewModel() {
private val _liveData = MutableLiveData<String>()
val liveData: LiveData<String> get() = _liveData
fun loadData() = viewModelScope.launch {
_liveData.value = "value"
_liveData.postValue("value")
}
}
1.代码更改为var类型
class LoadDetailViewModel : ViewModel() {
private var _liveData = MutableLiveData<String>()
var liveData: LiveData<String> get() = _liveData
fun loadData() = viewModelScope.launch {
_liveData.value = "value"
_liveData.postValue("value")
}
}
但是结果仍然是等价的,当我把mutableLiveData声明为var时没有错误,但是我不知道为什么要把它声明为val。
- 我知道Kotlin语言中的瓦尔类型是不可变的,而var类型是可变的。
- 那么把它声明为var类型不是正确的吗?
Android Developers我查了Android的官方文档,但没有答案。
1条答案
按热度按时间c0vxltue1#
当你调用
_liveData.value = "value"
时,注意你没有使用_liveData =
。所以你没有改变_liveData
属性,它也不需要是var
。你改变的是MutableLiveData内部的属性。使用
var
是错误的,因为你没有换出MutableLiveData
的示例。如果你把它改为一个不同的示例,你的观察者不会得到通知。你混淆了属性(包含对MutableLiveData示例的引用)和类(MutableLiveData本身)的可变性。MutableLiveData是一个可变类,因为它内部有可变变量。你可以改变它,但你不想改变包含对它的引用的属性。
使用
var
不会引起任何问题,因为您实际上没有使用可变性来更改对不同示例的引用。但是,由于您永远不应该这样做,因此没有理由使用var
而不是val
。使用val
可以使代码更清晰,更健壮。