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