为什么Kotlin在主构造函数中不允许任何代码?
使用代码blelow时造成不便
abstract class View { abstract fun findViewById(id: Int): View abstract fun setOnClickListener(listener: (View) -> Boolean) } class ViewHolder(itemView: View) { init { child1.setOnClickListener { false } } val child1 = itemView.findViewById(1) val child2 = itemView.findViewById(2) }
编译器抱怨说:
Kotlin: Variable 'child1' must be initialized
所以我必须添加一个额外的功能,并在每次施工后调用它:
class ViewHolder(itemView: View) { val child1 = itemView.findViewById(1) val child2 = itemView.findViewById(2) fun bindEventHandlers() { child1.setOnClickListener { false } } } val vh = ViewHolder(v) vh.bindEventHandlers()
那么,是否有任何方便的方法来做init这样的事情呢? 使用Android RecyclerView&ListView时,经常发生这种情况。
在init
块之前定义你的属性 –
class ViewHolder(itemView: View) { val child1 = itemView.findViewById(1) val child2 = itemView.findViewById(2) init { child1.setOnClickListener { false } } }