Когда вызывается блок init объекта? - PullRequest
1 голос
/ 11 января 2020

Я пытался узнать, когда блок init из object вызывается в Kotlin с использованием приведенного ниже кода, но я не получаю никакого результата в консоли:

fun main(args: Array<String>) {
    TestObj
    TestObj
}

object TestObj {
    var count = 0

    init {
        fun howManyTimes() {
            println(++count)
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 11 января 2020

Вы не получаете никакого вывода в консоли, потому что вы объявляете функцию внутри блока init и не вызываете ее.

Измените TestObj код на:

object TestObj {

    var count = 0

    init {
        howManyTimes()
    }

    fun howManyTimes() {
        println(++count)
    }
}
1 голос
/ 11 января 2020

Приведенный выше ответ дает четкое объяснение того, почему вы не получаете ожидаемый результат, я постараюсь ответить на ваш вопрос

Когда вызывается блок init объекта?

С kotlin в действии

Ключевое слово init вводит блок инициализатора. Такие блоки содержат код инициализации, который выполняется при создании класса и предназначены для использования вместе с первичными конструкторами. Поскольку основной конструктор имеет ограниченный синтаксис, он не может содержать код инициализации; Вот почему у вас есть блоки инициализатора. При желании вы можете объявить несколько блоков инициализаторов в одном классе.

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