Sealed classes определяют ограниченные иерархии классов, где все возможные подклассы известны на этапе компиляции. Они по своей природе являются abstract и не могут быть инстанцированы напрямую.
data class, object или обычным classПоскольку компилятор знает все подтипы, выражения when становятся исчерпывающими — то есть ветка else не требуется, и недостающие случаи обнаруживаются на этапе компиляции.
sealed class Result
data class Success(val data: String) : Result()
data class Error(val exception: Exception) : Result()
fun handle(result: Result) = when (result) {
is Success -> println(result.data)
is Error -> println(result.exception.message)
}
Это делает код безопаснее и удобнее в поддержке — если добавить новый подкласс, компилятор сразу отметит необработанные случаи.
Loading, Success и ErrorВ отличие от enum, подклассы sealed class могут хранить разные данные в каждом варианте, что делает их гораздо более гибкими для сложного моделирования предметной области.
Подклассы sealed класса можно объявлять в разных файлах, если они находятся в том же пакете, что и сам sealed класс.
Новый — ещё не проверен сообществом
Вы