> Как избежать ошибок при использовании lateinit var в Kotlin (Kotlin, Android)
Уровень: senior · Роль: mobile · Категория: Технические вопросы
Компании: Ozon
Стек: Kotlin, Android
> Пример ответа
Чтобы избежать ошибок с lateinit var, следуйте этим правилам:
-
Проверяйте инициализацию через
::isInitialized
Перед доступом к свойству используйтеif (::myVar.isInitialized) { ... }. Это предотвращаетUninitializedPropertyAccessException. -
Инициализируйте как можно раньше
В Android-контексте - вonCreate()для Activity илиonViewCreated()для Fragment. Не откладывайте доonResume()или других поздних колбэков. -
Избегайте
lateinitдля nullable-типов
lateinitпредназначен только для ненулевых типов. Если значение может бытьnull, используйтеvar myVar: Type? = nullс проверкой наnull. -
Не используйте
lateinitс примитивами
ДляInt,Booleanи т.д. используйте делегатby Delegates.notNull()или инициализируйте сразу. -
Осторожно с многопоточностью
lateinitне потокобезопасен. Если свойство инициализируется в одном потоке, а читается в другом, синхронизируйте доступ или используйтеlazyсLazyThreadSafetyMode.PUBLICATION. -
Предпочитайте
lazyдля однократной инициализации
Если свойство инициализируется только один раз и не зависит от внешнего контекста (например,onCreate), используйтеval myVar by lazy { ... }- это гарантирует инициализацию при первом доступе.
Пример правильного использования:
lateinit var adapter: MyAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) adapter = MyAdapter() // инициализация в onCreate } fun useAdapter() { if (::adapter.isInitialized) { adapter.notifyDataSetChanged() } }
> Похожие задачи по mobile
Как реализовать debounce для поиска с корутинами в Kotlin
Какие нововведения в Kotlin и Android за последние полгода запомнились
В чем разница между Int и Int? в Kotlin и когда Int рассматривается как объект, а когда как примитив
Какие проблемы возникают при оборачивании launch в try-catch в Kotlin Coroutines
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью