在Java中,可以使用null初始化引用变量,例如,可以像这样初始化String变量:
String str = null;
但在Kotlin中,重点是避免尽可能多地使用null . 那么如何在不使用null的情况下初始化属性
var str: String = ...
Kotlin中的观点不是永远不会使用 null (和可空类型),而是使用方便的语言结构安全地使用它而不是害怕它 . 虽然尽可能使用非可空类型是理想的,但您不应该存在各种 null 处理结构(安全调用,Elvis运算符等)的原因 .
null
如果您可以延迟创建变量,直到您有一些东西要分配给它,那么's a solution. If you can' t,然后将其标记为可空并为其分配 null 是完全没问题的,因为编译器将保护您免受危险的事情的影响 .
用户 lateinit keywords.Need使用,然后初始化
lateinit
private lateinit var str : String fun myInit(){ str = "something"; }
注意:访问未初始化的 lateinit 属性会导致 UninitializedPropertyAccessException .
UninitializedPropertyAccessException
但是, lateinit 不支持基本数据类型,例如 Int .
Int
你可以做
var str: String ... str = "Some Awesome Value"
如果你想让它可以为空,你可以做到
var str: String?
作为选择:
var str: String by Delegates.NotNull()
4 回答
Kotlin中的观点不是永远不会使用
null
(和可空类型),而是使用方便的语言结构安全地使用它而不是害怕它 . 虽然尽可能使用非可空类型是理想的,但您不应该存在各种null
处理结构(安全调用,Elvis运算符等)的原因 .如果您可以延迟创建变量,直到您有一些东西要分配给它,那么's a solution. If you can' t,然后将其标记为可空并为其分配
null
是完全没问题的,因为编译器将保护您免受危险的事情的影响 .用户
lateinit
keywords.Need使用,然后初始化注意:访问未初始化的
lateinit
属性会导致UninitializedPropertyAccessException
.但是,
lateinit
不支持基本数据类型,例如Int
.你可以做
如果你想让它可以为空,你可以做到
作为选择: