Блок инициализации в Котлине с 2+ конструкторами - PullRequest
1 голос
/ 19 марта 2019

Обнаружено, что блок init {} выполняется перед вторичным конструктором.

Так что в основном у меня есть два конструктора (primary и secondary). Основной используется только для инициализации простого представления. Вторичный - попытка заполнить 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 Ответ

3 голосов
/ 19 марта 2019

Вы не можете сделать это, так как блоки init по сути являются телом основного конструктора (как и любые встроенные инициализаторы свойств). Это означает, что он будет работать при вызове первичного из вторичного с this(context), и только тогда вы сможете запустить код в своем вторичном конструкторе.

Сначала запустив первичный конструктор, убедитесь, что ваш экземпляр уже находится в допустимом, сконструированном состоянии, когда выполняется тело первичного конструктора - например, ненулевые свойства имеют ненулевое значение и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...