Назад к вопросам
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 Представление состояний, событий, вариантов