Sobes.tech
Middle
172
questionbank

В чем различия между data-классами и sealed-классами в Kotlin?

Ответ от нейросети

sobes.tech AI

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

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

Основные различия:

Признак Data-класс Sealed-класс
Назначение Хранение данных Ограниченная иерархия классов
Методы Автоматически генерируются Не генерируются автоматически
Подклассы Могут быть где угодно Ограничены тем же файлом
Использование Как POJO (Plain Old Java Object) Для представления конечного числа состояний
Абстрактность Не могут быть abstract Могут быть abstract

Пример data-класса:

data class User(val name: String, val age: Int)

Пример sealed-класса:

sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val code: Int, val message: String) : Result()
    object Loading : Result() // Объект как подтип
}