Kotlin学习路(五):变量延迟初始化
16lz
2021-01-25
<本文学习郭神《第三行代码》总结>
在项目开发过程中一般会写很多全局变量,这些全局变量在代码中会做很多判空保护,这样就会是代码编写很繁琐。比如
var s : Second ?= nulloverride fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) s = Second() s ?. doHomework() s ?. doHome() s ?. doWork()}
当有多个全局变量时,就会写很多的判空保护。所以这里就需要对全局变量进行延迟初始化操作,使用关键字lateinit,它会告诉编译器,晚些时候对该变量进行初始化,在代码中就不用进行判空保护。
所以上述代码就可修改为:
lateinit var s : Secondoverride fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) s = Second() s . doHomework() s . doHome() s . doWork()}
可以看出,当加入lateinit关键字之后,就不用了做判空保护。
需要注意的是,如果在使用了lateinit关键字之后,调用全局变量时还未对该变量进行初始化,则会报错,抛出异常UninitializedPropertyAccessExcepetion,所以当使用lateinit关键字时必须要在调用全局变量之前进行初始化操作。
在初始化操作时,为避免重复初始化,可以进行初始化判断,使用语法!::s.isInitialized
进行初始化判断。
所以上述代码可以修改为:
lateinit var s : Secondoverride fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) if (!::s.isInitialized) s = Second() s . doHomework() s . doHome() s . doWork()}
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- Android(安卓)- 代码片段
- 【Android】Toast大全
- [置顶] Eclipse,到了说再见的时候了——Android(安卓)Studio最全
- Android(安卓)File.listFiles()返回null问题
- http上传文件到网络核心代码
- fanfou(饭否) android客户端 代码学习2
- android 设置Spinner文字标题颜色 字体大小样式
- Android变形(Transform)之Camera使用介绍