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

时间:2017-08-14 11:47:46

标签: android kotlin

A:初始化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)
    }
}

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

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

两个代码之间有什么不同?为什么?。

1 个答案:

答案 0 :(得分:3)

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

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

引自this article

  

首先,评估默认构造函数参数,从。开始   直接调用的构造函数的参数,后跟参数   任何委派的构造函数。接下来,初始化器(属性   初始化器和初始化块)按它们的顺序执行   在课堂上定义,从上到下。最后,构造者是   执行,从主构造函数开始并向外移动   通过委托构造函数,直到您调用的构造函数   被执行。