Отложенная инициализация в Kotlin
Свойство var иногда нельзя заполнить в момент
создания объекта: значение появится позже, в методе.
Модификатор lateinit откладывает инициализацию.
Тип такого свойства - не примитив и не nullable:
строка, свой класс или список:
class Profile {
lateinit var nickname: String
fun rename(name: String) {
nickname = name
}
}
Пока в свойство ничего не записали, чтение прерывает программу. Сначала вызывают метод, который записывает значение, и только потом читают поле:
fun main() {
val profile = Profile()
profile.rename("ann")
println(profile.nickname)
}
lateinit не ставят на val и на Int,
Double, Boolean. Для числа, которое
появится позже, оставляют обычное начальное значение
или тип с вопросом. Проверить, записано ли значение,
можно из того же класса:
class Profile {
lateinit var nickname: String
fun ready(): Boolean {
return ::nickname.isInitialized
}
}
Сделайте класс Employee со свойством
lateinit var name: String. Добавьте метод
hire, который записывает имя.
Создайте объект, вызовите hire со строкой
"john" и выведите имя.