📜  Kotlin 中的“lateinit”变量(1)

📅  最后修改于: 2023-12-03 15:02:32.459000             🧑  作者: Mango

Kotlin 中的“lateinit”变量

在 Kotlin 中,有一种称为“lateinit”的变量修饰符,表示“延迟初始化”。它允许我们在声明变量时并不指定初始值,而是在稍后的时间给变量赋值。

使用

我们可以在类中的任何位置使用“lateinit”关键字来声明变量。例如:

class Example {
    lateinit var name: String

    fun initialize() {
        name = "Kotlin"
    }
}

在这个例子中,我们声明了一个名为“name”的字符串类型的变量,并使用“lateinit”修饰符来告诉编译器我们稍后会对其进行初始化。然后在“initialize”函数中,我们给这个变量赋值。

需要注意的是,如果我们在使用还未初始化的“lateinit”变量时,程序将会抛出“UninitializedPropertyAccessException”异常。因此,在访问这类变量之前,我们需要显式地使用安全调用操作符来判断它是否已被初始化。

class Example {
    lateinit var name: String

    fun initialize() {
        name = "Kotlin"
    }

    fun printName() {
        if (::name.isInitialized) {
            println(name)
        }
    }
}

在这个例子中,我们通过安全调用操作符(“::”)来判断“name”变量是否已被初始化。如果已初始化,则打印其值;否则不执行任何操作。

适用场景

使用“lateinit”变量通常是为了避免null安全检查带来的额外开销。当我们确定变量在稍后的时间内会被正确地初始化时,就可以使用“lateinit”来避免null安全检查。

例如,在使用Android开发中,“lateinit”非常适合用来声明“View”组件。因为在“Activity”的“onCreate”方法中,我们通常会先“setContentView”来加载布局,然后才能通过findViewById找到对应的View组件。由于这个过程是在稍后的时间中进行的,因此我们可以使用“lateinit”来优化代码。

class MyActivity : AppCompatActivity() {
    lateinit var myButton: Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_my)

        myButton = findViewById(R.id.my_button)

        myButton.setOnClickListener {
            // do something
        }
    }
}

在这个例子中,我们使用“lateinit”来声明了一个“myButton”变量,然后在“onCreate”方法中通过findViewById对其进行初始化。这样可以避免在每次使用“myButton”时都进行一次null安全检查。

总结

“lateinit”变量是 Kotlin 中的一种延迟初始化方式,可以用于避免null安全检查带来的开销。使用前需要确保在变量被访问之前已经被正确地初始化。常见的使用场景包括 Android 中的 View 组件声明。