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)
}
两个代码之间有什么不同?为什么?。
答案 0 :(得分:3)
这些选项A和B的执行没有区别: 属性初始值设定项(立即分配值)和初始化程序块(使用init块)。但是对于像代码这样的简单初始化,通常使用Property初始化程序 - 在您的情况下使用选项B.
但是如果在代码中使用这两个版本,请注意初始化程序的执行顺序。
引自this article:
首先,评估默认构造函数参数,从。开始 直接调用的构造函数的参数,后跟参数 任何委派的构造函数。接下来,初始化器(属性 初始化器和初始化块)按它们的顺序执行 在课堂上定义,从上到下。最后,构造者是 执行,从主构造函数开始并向外移动 通过委托构造函数,直到您调用的构造函数 被执行。