Назад к вопросам
Junior
105
questionbank

Объясните, как работает свойство 'lateinit' в Kotlin.

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

  • Применяется только к изменяемым свойствам (var).
  • Не может использоваться с примитивными типами данных (как Int, Boolean, Float), так как они не могут быть null.
  • Компилятор не требует немедленной инициализации свойства при его объявлении.
  • Если свойство используется до инициализации, будет выброшено исключение UninitializedPropertyAccessException.

Пример:

class MyClass {
    lateinit var myProperty: String // Свойство будет инициализировано позже

    fun initializeProperty(value: String) {
        myProperty = value
    }

    fun useProperty() {
        println(myProperty) // Безопасно после инициализации
    }
}

fun main() {
    val obj = MyClass()
    // obj.useProperty() // Здесь будет выброшено UninitializedPropertyAccessException
    obj.initializeProperty("Hello")
    obj.useProperty() // Выведет "Hello"

    // Проверка на инициализацию
    if (obj::myProperty.isInitialized) {
        println("Свойство инициализировано")
    }
}

Можно проверить, было ли свойство с lateinit инициализировано, с помощью рефлексии: ::propertyName.isInitialized.

Применение lateinit часто встречается во фреймворках, где свойства внедряются (dependency injection) после создания объекта (например, в Android с UI-элементами или внедрением зависимостей).