Android 为什么MutableLiveData变量用等号(=)声明?

Android 为什么MutableLiveData变量用等号(=)声明?,android,kotlin,android-livedata,observers,mutablelivedata,Android,Kotlin,Android Livedata,Observers,Mutablelivedata,在Kotlin中,声明变量类型时使用冒号。即使在声明LiveData时,也会使用冒号。那么为什么等号用于可变LiveData呢?我还没弄明白。几天前,我花了大约2个小时试图理解为什么我的MutableLiveData变量不起作用,只是为了意识到我需要一个等号而不是冒号 例如: 提前谢谢 那么为什么等号用于可变LiveData呢 因为您正在通过其构造函数创建MutableLiveData的实例。您没有提供类型-Kotlin编译器正在根据您分配给属性的对象的类型推断类型 基本上,您的声明是以下内容的

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

例如:

提前谢谢

那么为什么等号用于可变LiveData呢

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

基本上,您的声明是以下内容的简写:

private val _liveData: MutableLiveData<Int> = MutableLiveData<Int>()
您可以在中了解有关类型推断的更多信息

那么为什么等号用于可变LiveData呢

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

基本上,您的声明是以下内容的简写:

private val _liveData: MutableLiveData<Int> = MutableLiveData<Int>()

您可以在中了解有关类型推断的更多信息。

Kotlin自动检测类型,因此您无需指定它。这些是等价的

val foo: Int = 123
val foo = 123
但是,如果您有一个稍后初始化的变量,则必须提供该类型,否则编译器无法确定它是什么类型。比如说,

class MyClass {
    val foo: Int  // must specify type

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

它与LiveData或MutableLiveData无关。

Kotlin自动检测类型,因此您无需指定它。这些是等价的

val foo: Int = 123
val foo = 123
但是,如果您有一个稍后初始化的变量,则必须提供该类型,否则编译器无法确定它是什么类型。比如说,

class MyClass {
    val foo: Int  // must specify type

    init {
        foo = /* compute foo */
    }
}
它与LiveData或MutableLiveData无关

这里您需要的原因是:LiveData只是因为Kotlin会为LiveData推断与_LiveData相同的类型MutableLiveData,而这个习惯用法的全部要点是阻止其他类对其调用postValue/setValue


这里您需要的原因是:LiveData只是因为Kotlin会为LiveData推断出与_LiveData相同的类型MutableLiveData,而这个习惯用法的全部要点是阻止其他类对其调用postValue/setValue。

这意味着编译器推断出一种类型的LiveData?我知道如果我写一个类,我可以用等号声明该类的变量。LiveData是一种类型,而MutableLiveData是一个类吗?@JamesFutures:这意味着编译器会推断LiveData的一种类型不,它推断出一种类型的可变LiveData。您正在创建MutableLiveData的实例。LiveData是一种类型,而MutableLiveData是一种类吗?-。MutableLiveData是:MutableLiveData,而不是。这意味着编译器推断一种类型的LiveData?我知道如果我写一个类,我可以用等号声明该类的变量。LiveData是一种类型,而MutableLiveData是一个类吗?@JamesFutures:这意味着编译器会推断LiveData的一种类型不,它推断出一种类型的可变LiveData。您正在创建MutableLiveData的实例。LiveData是一种类型,而MutableLiveData是一种类吗?-。MutableLiveData是:MutableLiveData,而不是。