Ответ вслух Junior Классы, data и sealed спрашивают часто обновлено

Расскажи про data class

Вопрос

Расскажи, что такое data class, что генерирует компилятор и где можно ошибиться.

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Data class нужен для классов-значений: DTO, состояния экрана, доменные модели. Компилятор генерирует equals и hashCode по содержимому, читаемый toString, copy для изменения части полей и componentN для деструктуризации.

Что должно прозвучать в ответе

  • Генерирует equals, hashCode, toString, copy, componentN

  • Только по свойствам первичного конструктора

  • copy поверхностный

  • Изменяемый data class опасен как ключ HashMap

  • Ограничения: нельзя open, abstract, sealed, inner

Что могут спросить следом

  • Можно ли наследоваться от data class?
  • Как исключить поле из equals?
  • Почему в Compose важно, чтобы state был неизменяемым?

Разбор

Data class нужен для классов-значений: DTO, состояния экрана, доменные модели. Компилятор генерирует equals и hashCode по содержимому, читаемый toString, copy для изменения части полей и componentN для деструктуризации. Важная деталь: всё это строится только по свойствам первичного конструктора, свойство из тела класса в сравнении не участвует. copy поверхностный, вложенный изменяемый список окажется общим. Если поля var, объект опасно класть в HashSet или использовать как ключ мапы: поменяли поле, сменился хеш, и элемент не найти. Поэтому data class лучше делать из val и неизменяемых коллекций. От data class нельзя наследоваться, сам он не может быть open, abstract, sealed или inner, но реализовывать интерфейсы и наследоваться от обычного класса может.

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

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