Разбор причины ошибки компиляции в Kotlin‑классе

Ошибка — var в параметре вторичного конструктора. Свойства через val/var объявляются в первичном конструкторе; делегирование this(section) здесь корректно.

Короткий ответ

Что ответить на собеседовании

Ошибка — var в параметре вторичного конструктора. Свойства через val/var объявляются в первичном конструкторе; делегирование this(section) здесь корректно.

Подробный разбор

Ответ с пояснениями

Условие

Нужно выяснить, почему приведённый ниже код не проходит компиляцию.

class Student(var name: String) {

    init {
        println("Student has got a name as $name")
    }

    constructor(section: String, var studentId: Int) : this(section) {
    }
}

Обратите внимание, что в конструкторе используется модификатор var перед параметром, а также происходит попытка вызвать основной конструктор с тем же параметром section, что приводит к конфликту.

Ответ

Ошибка — var в параметре вторичного конструктора. Свойства через val/var объявляются в первичном конструкторе; делегирование this(section) здесь корректно.

Один вариант исправления:

class Student(var name: String) {
    var studentId: Int = 0

    init {
        println("Student has got a name as $name")
    }

    constructor(section: String, studentId: Int) : this(section) {
        this.studentId = studentId
    }
}

Первичный конструктор принимает name, а вторичный передаёт ему значение параметра section. Разные имена параметров не создают конфликта. Сначала выполняется инициализация через первичный конструктор, затем тело вторичного. По смыслу section лучше переименовать в name, если это действительно имя студента.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее