为什么用等号 (=) 声明 MutableLiveData 变量?
Why are MutableLiveData variables declared with equals sign (=)?
在Kotlin中,声明变量的类型时,使用冒号。即使在声明 LiveData 时,也会使用冒号。那么为什么 等号 用于 MutableLiveData?我一直无法弄清楚这一点。几天前我花了大约 2 个小时试图理解为什么我的 MutableLiveData 变量不起作用只是为了意识到我需要一个等号而不是冒号。
示例:
private val _liveData = MutableLiveData<Int>()
val liveData: LiveData<Int>
提前致谢!
So why is an equals sign used for MutableLiveData?
因为您正在通过其构造函数创建 MutableLiveData
的实例。您没有提供类型——Kotlin 编译器根据您分配给 属性.
的对象类型推断它
基本上,您的声明是 shorthand for:
private val _liveData: MutableLiveData<Int> = MutableLiveData<Int>()
您可以在 Google's Kotlin docs 中了解有关类型推断的更多信息。
Kotlin 自动检测类型,所以你不需要指定它。这些是等价的
val foo: Int = 123
val foo = 123
但是,如果你有一个稍后初始化的变量,你必须提供类型,否则编译器无法确定它是什么类型。例如,
class MyClass {
val foo: Int // must specify type
init {
foo = /* compute foo */
}
}
与LiveData
或MutableLiveData
无关。
val liveData: LiveData<Int>
本身没有意义。它还需要初始化。我怀疑您正在查看 Android 编程中的一个相当常见的习语,但错过了下一行仍然是 liveData
:
定义的一部分
val liveData: LiveData<Int>
get() = _liveData
这里你需要 : LiveData<Int>
的原因只是因为否则 Kotlin 会为 liveData
和 _liveData
推断出相同的类型 MutableLiveData<Int>
成语是阻止其他类在其上调用postValue
/setValue
。
在Kotlin中,声明变量的类型时,使用冒号。即使在声明 LiveData 时,也会使用冒号。那么为什么 等号 用于 MutableLiveData?我一直无法弄清楚这一点。几天前我花了大约 2 个小时试图理解为什么我的 MutableLiveData 变量不起作用只是为了意识到我需要一个等号而不是冒号。
示例:
private val _liveData = MutableLiveData<Int>()
val liveData: LiveData<Int>
提前致谢!
So why is an equals sign used for MutableLiveData?
因为您正在通过其构造函数创建 MutableLiveData
的实例。您没有提供类型——Kotlin 编译器根据您分配给 属性.
基本上,您的声明是 shorthand for:
private val _liveData: MutableLiveData<Int> = MutableLiveData<Int>()
您可以在 Google's Kotlin docs 中了解有关类型推断的更多信息。
Kotlin 自动检测类型,所以你不需要指定它。这些是等价的
val foo: Int = 123
val foo = 123
但是,如果你有一个稍后初始化的变量,你必须提供类型,否则编译器无法确定它是什么类型。例如,
class MyClass {
val foo: Int // must specify type
init {
foo = /* compute foo */
}
}
与LiveData
或MutableLiveData
无关。
val liveData: LiveData<Int>
本身没有意义。它还需要初始化。我怀疑您正在查看 Android 编程中的一个相当常见的习语,但错过了下一行仍然是 liveData
:
val liveData: LiveData<Int>
get() = _liveData
这里你需要 : LiveData<Int>
的原因只是因为否则 Kotlin 会为 liveData
和 _liveData
推断出相同的类型 MutableLiveData<Int>
成语是阻止其他类在其上调用postValue
/setValue
。