fer*_*dev 17 android kotlin kotlin-null-safety
在Kotlin中,似乎有两种方法在对象内声明一个变量,该变量可以为null并在创建对象后实例化.
var myObject : Any? = null
Run Code Online (Sandbox Code Playgroud)
要么
var lateinit myObject : Any
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么我们可以让var可以为空并在以后分配它时需要lateinit关键字.每种方法的优缺点是什么?每种方法应该在什么情况下使用?
dis*_*han 20
以下是根据我目前在Kotlin的知识看到的差异.
第一:
var myObject1 : Any? = null
Run Code Online (Sandbox Code Playgroud)
这myObject1是一个可以为空的属性.这意味着你可以分配null给它.
第二个:
lateinit var myObject2 : Any
Run Code Online (Sandbox Code Playgroud)
这myObject2是一个非null属性.这意味着你无法分配null它.通常,如果属性为非null,则必须在声明处初始化它.但添加关键字lateinit可以推迟初始化.如果lateinit在初始化之前尝试访问该属性,则会出现异常.
简而言之,主要区别在于它myObject1是可空的并且myObject2是非空的.该关键字lateinit为您提供了一种便利机制,允许在以后初始化非null属性,而不是在声明中初始化它.
欲了解更多信息检查这个.
lateinitavoid在引用对象内部字段时,字段上使用关键字来进行空检查.当您使用依赖注入初始化变量或在单元测试的setup方法中初始化变量时,主要使用关键字
?当字段将在程序中稍后通过setter或对象的方法内部初始化时,在字段上使用,这是为了强制您检查null或?.在引用字段时使用null safety()