#android #kotlin
#Android #kotlin
Вопрос:
Обнаружено, что init {}
блок выполняется перед вторичным конструктором.
Итак, в основном у меня есть два конструктора ( primary
и secondary
). Primary используется только для инициализации простого представления. Вторичный — попытка заполнить EditViews данными. После secondary
конструктора я ожидаю, что init
блок будет выполнен.
Есть ли способ заставить это произойти?
class EditView(val context: Context){
constructor(context: Context, title: String): this(context) {
// Executes after init block
}
init {
// Ran before secondary constructor
// Code for initializing my view
}
}
Ответ №1:
Вы не можете этого сделать, поскольку init
блоки по сути являются телом основного конструктора (как и любые встроенные инициализаторы свойств). Это означает, что он будет выполняться при вызове основного из вторичного с помощью this(context)
, и только после этого вы сможете запустить код в вашем вторичном конструкторе.
Первый запуск основного конструктора гарантирует, что ваш экземпляр уже находится в допустимом сконструированном состоянии для запуска тела основного конструктора — например, ненулевые свойства имеют ненулевое значение и т.д.
Комментарии:
1. Спасибо за отличное объяснение!