Выбор ответа Senior Compose: композиция и рекомпозиция спрашивают часто обновлено
Почему List считается нестабильным
Вопрос
Почему Compose-компилятор считает параметр типа List<User> нестабильным?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: List это интерфейс: под ним может быть ArrayList, и изменения не будут замечены. Стабильность означает, что изменения объекта видны Compose или объект неизменяем.
Варианты ответа
Listслишком большой для сравнения черезequals, и компилятор его пропускает- Все коллекции в Kotlin изменяемые,
Listпросто скрывает методы записи Listэто интерфейс: под ним может бытьArrayList, и изменения не будут замеченыправильный ответ- Нестабильны только списки длиннее 100 элементов, а короткие Compose сравнивает поэлементно
Разбор
Стабильность означает, что изменения объекта видны Compose или объект неизменяем. List read-only только как интерфейс, реализация может меняться через другую ссылку без уведомления. Поэтому компилятор не доверяет ему. Решения: ImmutableList из kotlinx.collections.immutable, обёртка с @Immutable или конфигурация стабильности. Размер списка на стабильность не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.