为什么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 } } }