Вопрос проверяет понимание sealed классов в Kotlin, которые используются для ограничения иерархии наследования и создания типов с фиксированным набором подклассов.
Sealed классы (запечатанные классы) — это специальный вид классов в Kotlin, которые позволяют создать ограниченную иерархию типов. Это означает, что все возможные подклассы sealed класса известны на этапе компиляции и должны быть объявлены в том же файле, что и сам sealed класс. Это делает их идеальными для моделирования состояний, результатов операций или любых других ситуаций, где набор вариантов фиксирован.
Sealed классы объявляются с ключевым словом sealed. Подклассы могут быть объявлены как внутри тела sealed класса, так и на верхнем уровне того же файла. Главное преимущество — при использовании when выражения компилятор проверяет, что все возможные варианты обработаны, что исключает ошибки.
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("Data: ${result.data}")
is Result.Error -> println("Error: ${result.message}")
Result.Loading -> println("Loading...")
}
}Sealed классы широко используются в архитектуре Android (например, для представления состояний UI), в функциональном программировании (для алгебраических типов данных) и в любых сценариях, где нужно гарантировать обработку всех возможных вариантов. Они также полезны при работе с сетевыми запросами, где результат может быть успешным, ошибочным или в процессе загрузки.
Sealed классы стоит применять, когда необходимо создать тип с фиксированным набором подклассов, чтобы обеспечить безопасность типов и избежать ошибок при обработке всех возможных вариантов. Это делает код более читаемым и поддерживаемым.