在Kotlin中初始化类变量的正确位置是什么

Mah*_*Ali 8 android kotlin

答:在init块中初始化类变量

private class ViewHolder(view: View) {
    val menuImg: ImageView
    val txtMenu: TextView

    init {
        menuImg = view.find(R.id.menuImg)
        txtMenu = view.find(R.id.txtMenu)
    }
}
Run Code Online (Sandbox Code Playgroud)

B:直接在类块中初始化类变量

 private class ViewHolder(view: View) {
    val menuImg: ImageView = view.find(R.id.menuImg)
    val txtMenu: TextView =  view.find(R.id.txtMenu)
}
Run Code Online (Sandbox Code Playgroud)

两个代码之间有什么区别,为什么?

Bob*_*Bob 6

这些选项A和B的执行没有区别:属性初始化程序(立即分配一个值)和初始化程序块(使用init块)。但是对于像您的代码这样的简单初始化,通常使用Property初始化程序-这种情况下使用选项B。

但是,如果在代码中同时使用两个版本,请注意初始化程序的执行顺序。

引用本文

首先,评估默认的构造函数参数,从直接调用的构造函数的参数开始,然后是任何委托的构造函数的参数。接下来,按照在类top-to-bottom中定义的顺序执行初始化器(属性初始化器和init块)。最后,将执行构造函数,从主构造函数开始,然后通过委托的构造函数向外移动,直到执行您调用的构造函数为止。