Шаг 155.
Основы Kotlin.
Инициализация. Блок инициализации

    На этом шаге мы рассмотрим создание и использование блока инициализации.

    Помимо главного и вспомогательных конструкторов, в Kotlin можно указать блок инициализации для класса. Блок инициализации - это способ настроить переменные или значения, а также произвести их проверку, то есть убедиться, что конструктору переданы допустимые аргументы. Код в блоке инициализации выполняется сразу после создания экземпляра класса.

    Например, при создании игрока к нему предъявляется ряд требований: игрок должен начать игру хотя бы с одним очком здоровья, а имя не должно быть пустым.

    Воспользуйтесь блоком инициализации, обозначенным ключевым словом init, для проверки этих требований.

class Player (_name: String,
              var healthPoints: Int = 100,
              val isBlessed: Boolean,
              private val isImmortal: Boolean) {
    var name = _name
        get() = field.capitalize()
        private set(value) {
            field = value.trim()
        }
    init {
        require(healthPoints > 0, { "healthPoints must be greater than zero." })
        require(name.isNotBlank(), { "Player must have a name." })
    }

    constructor(name: String) : this(name,
            isBlessed = true,
            isImmortal = false) {
        if (name.toLowerCase() == "kar") healthPoints = 40
    }
    .   .   .   . 
}


Рис.1. Объявление блока инициализации (Player.kt)

    Если хотя бы одно из условий не выполнится, будет возбуждено исключение IllegalArgumentException (можете проверить это в Kotlin REPL, передав в Player другие параметры).

    Эти требования сложно реализовать в конструкторе или в объявлении свойства. Код в блоке инициализации вызывается сразу после создания экземпляра. При этом неважно, какой конструктор вызывался - главный или вспомогательный.

    На следующем шаге мы рассмотрим инициализацию свойств.




Предыдущий шаг Содержание Следующий шаг