ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 1. lateinit懒加载 该从`Java`转到`Kotlin`写代码的时候,会很容易犯的一个错误就是类似定义一个类的属性: ``` var name: String ``` 上面的定义毫无疑问是错误的。但是,我们期望在最终第一次使用的时候去初始化,那么可能像这样定义: ``` var name: String? = null ``` 但是,在后面调用的时候,如果后面要求为不可变类型的时候,就不能这样调用,比如: ~~~ // 定义类的属性 var tab_note_img: ImageView? = null // 在初始化方法中进行初始化 tab_note_img = findViewById<ImageView>(R.id.tab_note_iv) // 以下写法会报错 tab_note_img.isSelected = true ~~~ ![](https://img.kancloud.cn/a6/2a/a62a8f36690ceb66e24deb8757e65d90_964x102.png) 但是如果我们修改一下定义: ~~~ lateinit var tab_note_img: ImageView ~~~ 就不会有这个问题。但是这个只是编译器不检查而已,实际上也不会自动赋值为`null`,这里如果粗心就很容易导致程序崩溃。所以这种延迟初始化方法不太推荐使用。 # 2. by lazy懒加载 区别于上面的懒加载,这种更受推荐,因为不会因为考虑不到而导致程序崩溃。这种加载方式也叫做惰性加载。 对于全局唯一的`ImageView`控件,直接使用懒加载如下: ~~~ val tab_note_img: ImageView by lazy { findViewById<ImageView>(R.id.tab_note_iv) } ~~~ 这种方式可以将初始化的时机交给程序自己来决定,为一种懒汉式的方式进行加载。更加贴近我们的需求。