Middle
Да ли познајеш sealed класе и у чему је њихова особеност?
sobes.tech АИ
Одговор од АИ
Да, познајем.
Особеност sealed класа је што они омогућавају ограничење хијерархије наслеђивања. Сви директни подтипови sealed класе морају бити објављени у истом фајлу. Ово осигурава да компајлер зна све могуће подтипове, што је корисно за проверу потпуности у изразима when.
Пример:
sealed class Result {
data class Success(val message: String) : Result()
data class Error(val code: Int, val description: String) : Result()
object Loading : Result() // Јединствени објекат за стање учитавања
}
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Успех: ${result.message}")
is Result.Error -> println("Грешка ${result.code}: ${result.description}")
Result.Loading -> println("Учитавање...")
// Није потребно else, јер компајлер зна све могуће опције
}
}
Предности:
- Безбедност: Гарантује потпуност израза
whenбез потребе заelse. - Јасноћа: Јасно означава ограничени скуп могућих стања или подтипова.
- Контрола: Превентивно спречава неконтролисано наслеђивање изван класе.
Разлика од enum class: sealed класе могу имати различите типове података за сваки подтип (као Success и Error у примеру), док су елементи enum class статички и могу имати само одређене особине, заједничке за све. sealed класе такође могу имати објекте-екземпляре (Loading).