Расскажи про data class
Вопрос
Расскажи, что такое data class, что генерирует компилятор и где можно ошибиться.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Генерирует 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 ошибок.