Почему Котлин не разрешает использовать какой-либо код в основном конструкторе?

Это вызывает неудобства при работе с кодом blood

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() 

Итак, есть ли удобный способ сделать такие вещи? Это часто происходит при работе с Android RecyclerView & ListView.

Определите свои свойства перед блоком init

 class ViewHolder(itemView: View) { val child1 = itemView.findViewById(1) val child2 = itemView.findViewById(2) init { child1.setOnClickListener { false } } }