查看一些谷歌演示应用程序(如向日葵或谷歌io 2018应用程序(的代码,我注意到对于viemodels的支持属性,它们使用了一个带有自定义getter的相同类型的单独实例;像这样:
private val _userData: MutableLiveData<User>
val userData: LiveData<User>
get() = _userData
但他们为什么这么做?直接访问_userData
不是更好吗?这可能是因为当_userData
是MutableLiveData
时,他们不希望观察者能够更改值吗?
暴露于Activity或Fragment的userData
必须是不可变的,因为视图只需要观察到LiveData
。因此,我们需要使实际的_userData
返回一个LiveData
。
一种方法是使用Kotlin编码约定,创建两个变量_userData
和userData
,一个是可变的,另一个不是:
如果一个类有两个属性,它们在概念上是相同的,但只有一个是公共API的一部分,另一个是实现细节,使用下划线作为私有属性名称的前缀。