首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MutableLiveData变量声明为等于符号(=)?

问为什么MutableLiveData变量声明为等于符号(=)?
EN

Stack Overflow用户
提问于 2020-06-23 23:03:10
回答 3查看 410关注 0票数 2

在Kotlin中,当声明变量类型时,使用冒号。即使在声明LiveData时,也会使用冒号。那么,为什么MutableLiveData使用等号呢?我还没搞清楚。几天前,我花了大约2个小时试图理解为什么我的MutableLiveData变量不起作用,只是意识到我需要的是相等而不是冒号。

示例:

代码语言:javascript
复制
private val _liveData = MutableLiveData<Int>()  
val liveData: LiveData<Int>

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-23 23:09:12

Kotlin自动检测到类型,因此不需要指定它。这些都是等价的

代码语言:javascript
复制
val foo: Int = 123
val foo = 123

但是,如果有一个稍后初始化的变量,则必须提供该类型,否则编译器无法确定它是哪种类型。例如,

代码语言:javascript
复制
class MyClass {
    val foo: Int  // must specify type

    init {
        foo = /* compute foo */
    }
}

它与LiveData或MutableLiveData无关。

票数 3
EN

Stack Overflow用户

发布于 2020-06-24 13:26:30

代码语言:javascript
复制
val liveData: LiveData<Int>

本身是没有意义的。它也需要初始化。我怀疑您正在研究Android编程中一个相当常见的成语,但忽略了下一行仍然是liveData定义的一部分。

代码语言:javascript
复制
val liveData: LiveData<Int>
  get() = _liveData

在这里,您需要: LiveData<Int>的原因是,否则Kotlin将推断liveData的MutableLiveData<Int>类型与_liveData的类型相同,而这个成语的全部意义是阻止其他类在其上调用postValue/setValue。

票数 4
EN

Stack Overflow用户

发布于 2020-06-23 23:08:31

那么,为什么MutableLiveData使用等号呢?

因为您正在通过MutableLiveData的构造函数创建一个实例。您没有提供一个类型- Kotlin编译器是从您要分配给属性的对象的类型推断它的。

基本上,你的声明是以下几个字的缩写:

代码语言:javascript
复制
private val _liveData: MutableLiveData<Int> = MutableLiveData<Int>()

您可以在谷歌的Kotlin文档中了解有关类型推断的更多信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62545069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档