Sobes.tech
Middle

Šta su sealed klase i koja je njihova svrha?

sobes.tech АИ

Одговор од АИ

Sealed-класси представљају ограничене хијерархије класа. Користе се за представљање ограниченог скупа могућих стања или вредности.

Основне особине и намене:

  • Ограничена хијерархија: Наследници sealed-класе морају бити објављени у истој датотеци или унутар sealed-класе пре Kotlin 1.5. Од верзије 1.5, ограничење је олабављено: наследници могу бити у било којој датотеци истог пакета.
  • Enum-класе са стањем: За разлику од enum-класа, сваки наследник sealed-класе може имати своје стање и понашање.
  • Исцрпна when: Компилатор гарантује да је блок when за примерак sealed-класе исцрпан (сви случајеви су обухваћени), ако није наведен else ветва. Ово смањује вероватноћу грешака током извршавања.

Пример:

sealed class Result<out T> {
    data class Success<out T>(val data: T) : Result<T>()
    data class Error(val exception: Exception) : Result<Nothing>()
    object Loading : Result<Nothing>() // Јединични примерак
}

fun processResult(result: Result<String>) {
    when (result) {
        is Result.Success -> {
            // Обрада успешног резултата
            println("Data: ${result.data}")
        }
        is Result.Error -> {
            // Обрада грешке
            println("Error: ${result.exception.message}")
        }
        Result.Loading -> {
            // Обрада стања учитавања
            println("Loading data...")
        }
        // `else` ветва није потребна, јер су сви подкласе
        // Result обрађене од стране компајлера
    }
}

Назначење:

  • Безбедно представљање стања: Поуздано представља крајњи број могућих стања, на пример, резултат мрежног захтева (Success, Error, Loading).
  • Побољшање читљивости кода: Чини код јаснијим при обради различитих случајева.
  • Повећање поузданости when израза: Компилатор помаже у избегавању необрађених случајева.
  • Замена enum-класа са стањем: Када је потребно повезати податке са одређеним "варијантама" енумерације.

Дакле, sealed-класе пружају флексибилан начин моделовања крајњих скупова вредности са могућношћу чувања специфичних података за сваку вредност, уз обезбеђење безбедности и јасности при обради тих вредности у when изразима.