Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktOpEsSd 78 of 123 menu
◀ ▶

Объявление sealed class в Kotlin

Ключевое слово Sealed class задаёт родительский тип с заранее известным полным набором подтипов. Наследование здесь оформляют так же, как от open class или абстрактного родителя, но все потомки объявляют в том же файле; снаружи файла новый наследник добавить нельзя:

sealed class Result { data class Ok(val text: String) : Result() data class Fail(val message: String) : Result() } fun main() { val result: Result = Result.Ok("saved") println(result) }

Вариант без данных оформляют как object. Так отмечают единственное состояние вроде загрузки или пустого результата:

sealed class LoadState { object Loading : LoadState() data class Done(val count: Int) : LoadState() } fun main() { val state: LoadState = LoadState.Loading println(state) }

Переменная запечатанного типа может хранить любой из объявленных подтипов. Проверка типа и разбор по вариантам удобно делаются в when - компилятор видит весь список наследников:

sealed class Payment { data class Card(val last4: String) : Payment() data class Cash(val amount: Double) : Payment() } fun describe(p: Payment): String = when (p) { is Payment.Card -> "card ${p.last4}" is Payment.Cash -> "cash ${p.amount}" } fun main() { println(describe(Payment.Card("4242"))) }

Объявите sealed class Answer с вариантами Yes и No как object. Сохраните Yes в переменную reply и выведите ее.

Объявите sealed class Mail: Inbox с полем unread: Int, Sent с полем total: Int. Создайте Mail.Inbox(3), сохраните в box и выведите число unread.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить