РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1282 of 1310 menu

Ключевое слово lateinit

Ключевое слово lateinit используется для объявления свойств класса, которые не инициализируются сразу в конструкторе, но гарантированно будут инициализированы перед первым использованием. Применяется только для var свойств не nullable типов, которые не являются примитивами.

Синтаксис

lateinit var propertyName: Type

Пример

Объявление отложенно инициализируемого свойства:

class UserService { lateinit var userRepository: UserRepository fun initialize() { userRepository = UserRepository() } fun getUser(id: Int): User { return userRepository.findUser(id) } }

Пример

Проверка инициализации свойства с помощью ::property.isInitialized:

class ConfigLoader { lateinit var config: Configuration fun loadConfig() { config = Configuration.loadFromFile() } fun printConfig() { if (::config.isInitialized) { println(config) } else { println("Config not loaded yet") } } }

Пример

Ошибка при обращении к неинициализированному lateinit свойству:

class DataProcessor { lateinit var dataSource: DataSource fun process() { // Вызовет UninitializedPropertyAccessException val data = dataSource.getData() } }

Результат выполнения кода:

UninitializedPropertyAccessException: lateinit property dataSource has not been initialized

Пример

Использование lateinit для внедрения зависимостей:

class OrderService { lateinit var paymentGateway: PaymentGateway lateinit var emailService: EmailService fun processOrder(order: Order) { paymentGateway.processPayment(order) emailService.sendConfirmation(order) } }

Ограничения

Ключевое слово lateinit имеет следующие ограничения:

  • Может использоваться только с var свойствами
  • Не может использоваться с примитивными типами (Int, Boolean и т.д.)
  • Не может использоваться с nullable типами (String?)
  • Доступно только для свойств класса, но не для локальных переменных

Смотрите также

  • ключевое слово lazy,
    для ленивой инициализации свойств
  • ключевое слово var,
    для объявления изменяемых свойств
  • ключевое слово val,
    для объявления неизменяемых свойств
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить