<本文学习郭神《第三行代码》总结>
在项目开发过程中一般会写很多全局变量,这些全局变量在代码中会做很多判空保护,这样就会是代码编写很繁琐。比如
var s : Second ?= null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
s = Second()
s ?. doHomework()
s ?. doHome()
s ?. doWork()
}
当有多个全局变量时,就会写很多的判空保护。所以这里就需要对全局变量进行延迟初始化操作,使用关键字lateinit,它会告诉编译器,晚些时候对该变量进行初始化,在代码中就不用进行判空保护。
所以上述代码就可修改为:
lateinit var s : Second
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
s = Second()
s . doHomework()
s . doHome()
s . doWork()
}
可以看出,当加入lateinit关键字之后,就不用了做判空保护。
需要注意的是,如果在使用了lateinit关键字之后,调用全局变量时还未对该变量进行初始化,则会报错,抛出异常UninitializedPropertyAccessExcepetion,所以当使用la