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() // Объект как подтип
}