在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**
延期分配是什么意思?
答案 0 :(得分:4)
这只是意味着该变量不是在其声明中初始化的,而是在以后的时刻初始化的。
答案 1 :(得分:1)
如文档中所述,在下一行初始化val c: Int
之前,先声明c
。
这意味着您可以在声明函数后的某些行中初始化一个不可为空的val
。
例如这样的例子:
class Hichhiker {
fun foo() {
val firstName: String
val lastName: String
val age: Int
firstName = "Arthur"
lastName = "Dent"
age = 40
}
}
代替此:
class Hichhiker {
fun foo() {
val firstName = "Arthur"
val lastName = "Dent"
val age = 40
}
}
因此,即使分配被某些代码行推迟了,编译器仍可以识别不可为空的val
的初始化。
有关在类级别上类似且更常用的内容,请参见lateinit和delegates like lazy()
答案 2 :(得分:0)
这只是意味着变量已经被初始化并且赋值给它发生在初始化下面的代码行中。意味着赋值被推迟到以后。