Ошибка — var в параметре вторичного конструктора. Свойства через val/var объявляются в первичном конструкторе; делегирование this(section) здесь корректно.
Разбор причины ошибки компиляции в Kotlin‑классе
Ошибка — 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, если это действительно имя студента.