Sobes.tech
Junior — Middle

В кои случаи е по-добре да използвате sealed class вместо enum в Kotlin?

sobes.tech AI

Отговор от AI

В Kotlin се препоръчва sealed клас преди enum, когато трябва да опишете ограничен набор от типове с различни структури от данни и поведение, а не просто набор от константи.

Разлики и кога да използвате sealed клас:

  • Различни данни при вариантите: В enum всички елементи са константи от един и същи тип, докато sealed клас позволява на всеки подклас да има свои свойства и методи.
  • Наследяване и разширяемост: Sealed клас е базов клас с ограничен брой наследници, полезен за изразяване на йерархии.
  • Използване в when: Компилаторът проверява пълнотата на when за sealed клас, което увеличава безопасността.

Пример за sealed клас:

sealed class Резултат {
    data class Успех(val данни: String) : Резултат()
    data class Грешка(val грешка: Throwable) : Резултат()
    object Зареждане : Резултат()
}

fun обработиРезултат(резултат: Резултат) {
    when(резултат) {
        is Резултат.Успех -> println("Данни: ${резултат.дани}")
        is Резултат.Грешка -> println("Грешка: ${резултат.грешка.message}")
        Резултат.Зареждане -> println("Зареждане...")
    }
}

Ако имате нужда само от списък с фиксирани константи без данни, enum ще бъде по-прост и ефективен.