假设我有以下课程:
class ExampleClass: OtherClass {
lateinit var thing: Thing
var thingOptional: Thing? = null
fun exampleFun() {
val innerThing = thing ?: Thing()
val innerThing2 = thingOptional ?: Thing()
}
}
产生以下警告:
Elvis operator (?:) always returns the left operand of non-nullable type Thing
然后是以下运行时异常:
lateinit property thing has not been initialized
因此,在我的理解中,可选可以是一种类型,也可以是任何时候的 null,而lateinit
变量可以是 null,直到它被赋予一个值,然后再也不能为 null,并且必须被赋予一个值。但是很明显,语义lateinit
略有不同。
那么:lateinit
为什么它不是 falsy 的起始值是多少?是否可以以lateinit
这种方式使用,作为可选的替代品?如果没有,我该如何创造这种价值?(允许 null 作为起始状态,但随后不可为 null)