我有一个密码

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

10-02 06:01