为什么专用集不适用于MutableLiveData



我有一个代码

var exampleData = MutableLiveData<String>()
private set

我想把setter隐藏到MutableLiveData 的值

exampleData.value = "Hi!" // still working

我试过几种方法,但都奏效了!

var exampleData = MutableLiveData<String>()
private set(value) { field = value } // Working!
var exampleData = MutableLiveData<String>()
internal set // Working!
var exampleData = MutableLiveData<String>()
internal set(value) { field = value } // Working!

如何隐藏这个二传手?

属性的setter与MutableLiveData无关,因为它在对象本身中是可变的。您必须将其强制转换为LiveData,这可以使用backing属性来完成。
private val _exampleData = MutableLiveData<String>()
val exampleData: LiveData<String> get() = _exampleData

您可以使用_exampleData.value = "value"私下更改值,并且只公开一个不可变的LiveData

从LiveData和MutableLiveData的文档中,您可以在LiveDatasetValue()&postValue()方法不是公共的。然而,在MutableLiveData中,它们可以被访问。因此,如果您想使它们不可访问,请将其更改为LiveData,而不是使用MutableLiveData

最新更新