Назад к вопросам
Middle
102
questionbank
Для чего используются data-классы и sealed-классы в Kotlin?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Data-классы упрощают создание классов, предназначенных только для хранения данных. Компилятор автоматически генерирует для них:
equals()hashCode()toString()copy()componentN()для деструктуризации
data class User(val name: String, val age: Int)
// Использование
val user = User("Alice", 30)
println(user) // Выводит User(name=Alice, age=30)
val user2 = user.copy(age = 31)
val (name, age) = user // Деструктуризация
Sealed-классы представляют собой ограниченную иерархию классов, где все возможные подклассы известны во время компиляции. Это позволяет использовать их в выражениях when без блока else, гарантируя исчерпывающую проверку всех возможных вариантов.
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result() // Объект, так как нет параметров
}
fun handleResult(result: Result) {
when (result) {
is Result.Success -> println("Успех: ${result.data}")
is Result.Error -> println("Ошибка: ${result.message}")
Result.Loading -> println("Загрузка...")
}
}
Сравнение:
| Признак | Data-класс | Sealed-класс |
|---|---|---|
| Назначение | Хранение данных | Ограниченная иерархия классов |
| Возможности | Автоматическая генерация методов | Исчерпывающая проверка в when |
| Подклассы | Нет специфичного ограничения | Должны быть определены в том же файле или модуле |
| Использование | Модели данных, DTO | Представление состояний, событий, вариантов |