Можно ли в операторе when указать не всех наследников sealed класса

«Можно ли в операторе when указать не всех наследников sealed класса» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно. В Kotlin при использовании when с sealed классами компилятор требует покрыть все возможные варианты, но есть несколько способов обойти это:

  1. Использование else – если не все случаи обработаны, можно добавить ветку else:
when (sealedInstance) {
    is Subclass1 -> handleSubclass1()
    else -> handleOthers()
}
  1. Локальные переменные – если when используется как выражение (возвращает значение), но не все случаи нужны, можно сделать его statement (без возврата):
val result = when {
    sealedInstance is Subclass1 -> "Case 1"
    else -> "Default"
}
  1. Игнорирование через _ – в Kotlin 1.7+ можно использовать _ для неиспользуемых веток:
when (sealedInstance) {
    is Subclass1 -> action()
    else -> {}
}