Выбор ответа Senior Compose: композиция и рекомпозиция спрашивают часто обновлено

Почему List считается нестабильным

Вопрос

Почему Compose-компилятор считает параметр типа List<User> нестабильным?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: List это интерфейс: под ним может быть ArrayList, и изменения не будут замечены. Стабильность означает, что изменения объекта видны Compose или объект неизменяем.

Варианты ответа

  1. List слишком большой для сравнения через equals, и компилятор его пропускает
  2. Все коллекции в Kotlin изменяемые, List просто скрывает методы записи
  3. List это интерфейс: под ним может быть ArrayList, и изменения не будут замеченыправильный ответ
  4. Нестабильны только списки длиннее 100 элементов, а короткие Compose сравнивает поэлементно

Разбор

Стабильность означает, что изменения объекта видны Compose или объект неизменяем. List read-only только как интерфейс, реализация может меняться через другую ссылку без уведомления. Поэтому компилятор не доверяет ему. Решения: ImmutableList из kotlinx.collections.immutable, обёртка с @Immutable или конфигурация стабильности. Размер списка на стабильность не влияет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.