Kotlin中的递延任务是什么?

Ram*_*mar 2 terminology variable-assignment kotlin

在Kotlin文档中,提到了有关延迟分配的内容

val a: Int = 1  // immediate assignment  
val b = 2   // `Int` type is inferred  
val c: Int  // Type required when no initializer is provided  
c = 3       // **deferred assignment**
Run Code Online (Sandbox Code Playgroud)

延迟分配是什么意思?

yol*_*ole 6

这仅表示该变量不是在其声明中初始化,而是在以后的某个时刻初始化。


dev*_*Lui 5

如文档中所述,val c: Int之前声明的内容c在以下行中初始化。

val这意味着您可以在声明函数后的几行内初始化不可为 null 的函数。

例如这样:

class Hichhiker {
    fun foo() {
        val firstName: String
        val lastName: String
        val age: Int
        firstName = "Arthur"
        lastName = "Dent"
        age = 40
    }
}
Run Code Online (Sandbox Code Playgroud)

而不是这个:

class Hichhiker {
    fun foo() {
        val firstName = "Arthur"
        val lastName = "Dent"
        val age = 40
    }
}
Run Code Online (Sandbox Code Playgroud)

val因此,即使赋值被某些代码行延迟,编译器也会识别不可空值的初始化。

对于类级别上类似且更常用的内容,请参阅Lateinit像lazy() 这样的委托