我混淆了lateinit和nullable变量,这两个变量应该使用哪一个.

lateinit var c: String
var d: String? = null
c = "UserDefinedTarget"

// if not added initialisation for c than throws UninitializedPropertyAccessException
if (c == "UserDefinedTarget") {
    //do some stuff.
}
//not throws any exception whether d is initialise or not.
if(d == "UserDefinedTarget") {
     //do some stuff
}

推荐答案

一个可为null的类型就是一个有效状态为null的对象.

不可为null的late init var表示null是无效状态,但由于某些原因,无法在构造函数中填充它.

Android Activities are a good example of a use of lateinit. Activities must have a no args constructor and their lifecycle only really starts with onCreate().

Kotlin相关问答推荐

Kotlin协程挂起继续线程

如何在Android应用判断上运行多个查询

同时也是一个字符串的 Kotlin 枚举

在 Kotlin 中将两个字节转换为 UIn16

在 kotlin 中使具体化字段可选

在 kotlin 中重载函数时,我在一些非常基本的代码上不断收到类型不匹配

如何在kotlin中使用协程每秒调用一个函数

如何使用 Findbugs 避免 kotlin 文件

模拟异常 - 没有找到答案

Kotlinwhen表达式在使用主题时是否支持复合布尔表达式?

变量后的Android问号

Kotlin 具体化的泛型不会按计划保持类型

Kotlin - 来自 KType 的 KClass<*>

什么是开放式property?为什么我不能将其设置器设为private私有?

面临一些未知问题一些后端jvm内部错误

使用范围的稀疏sparse值列表

项目未与 Gradle 链接

Kotlin reflect proguard SmallSortedMap

如果kotlin已经有了getter和setter,为什么在数据类中有componentN函数?

Failure delivering result on activity result