什么是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) } } 

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

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

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

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

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

从这篇文章引用:

首先,对默认的构造函数参数进行求值,从直接调用的构造函数的参数开始,然后是任何委托构造函数的参数。 接下来, 初始化器(属性初始化器和初始化块)按照在类中定义的顺序执行,从上到下执行 。 最后,执行构造函数,从主构造函数开始,通过委托构造函数向外移动,直到执行构造函数。