Назад к вопросам
Junior
106
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-элементами или внедрением зависимостей).