Middle
44
questionbank

Расскажи о data-классах и sealed-классах в Kotlin.

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Data классы в Kotlin используются для хранения данных. Они автоматически генерируют полезные методы equals(), hashCode(), toString(), copy(), а также компоненты для деструктуризации.

kotlin

Sealed классы используются для представления ограниченной иерархии классов. Все подклассы должны быть определены в том же файле, что и сам sealed класс (в Kotlin 1.5+ это ограничение ослаблено). Это позволяет компилятору убедиться в исчерпывающем переборе подклассов, например, в выражении when.

kotlin

Основные отличия:

  • Назначение: data классы - хранение данных, sealed классы - ограничение иерархии классов.
  • Генерируемые методы: data классы генерируют стандартные методы для данных, sealed классы - нет.
  • Ограничение подклассов: sealed классы накладывают ограничения на объявление подклассов, data классы - нет.
  • when исчерпывающий перебор: компилятор Kotlin может проверить исчерпывающий перебор подклассов sealed класса в when без ветки else.

И sealed, и data классы могут быть абстрактными, однако data классы не могут быть open (поскольку они final по умолчанию) и не могут реализовывать open методы напрямую (только через интерфейсы или абстрактные классы). Sealed классы по умолчанию абстрактны, а их конструкторы приватные.