Sobes.tech
Junior — Middle

Може ли да се използва операторът when за обработка на не всички подкласове на sealed клас?

sobes.tech AI

Отговор от AI

В Kotlin, если у вас есть sealed класс, оператор when при проверке всех его подклассов может использоваться без ветки else, так как компилятор знает все возможные варианты. Однако, если вы не обрабатываете все подклассы sealed класса в when, то компилятор потребует добавить ветку else для обработки пропущенных случаев.

То есть, можно использовать when для обработки не всех подклассов, но тогда обязательно нужна ветка else.

Пример:

sealed class Result {
    class Success(val data: String) : Result()
    class Error(val error: Throwable) : Result()
}

fun handle(result: Result) {
    when (result) {
        is Result.Success -> println("Success: ${result.data}")
        else -> println("Что-то другое") // обязательно, если не все подклассы обработаны
    }
}

Если же обработать все подклассы, else не нужен.