Middle
Как да използваме запечатани класове за моделиране на йерархии в Kotlin?
sobes.tech AI
Отговор от AI
Затворените класове (sealed classes) се използват за представяне на ограничени йерархии на наследяване, където всички възможни подкласове са известни по време на компилация.
Основни характеристики:
- Всички директни подкласове трябва да се намират в същия файл като затворения клас (преди Kotlin 1.5). От Kotlin 1.5 нататък, те могат да бъдат във всеки файл от същата компилация.
- Подкласовете на затворения клас могат да бъдат обикновени класове, data класове, декларации object или други затворени класове.
- Конструкторът на затворения клас по подразбиране е частен; други модификатори (public, protected, internal) не са разрешени.
- Позволяват използването на изчерпателен (
exhaustive) анализ в when изрази, което гарантира обработката на всички възможни варианти и елиминира необходимостта от else клон.
Пример за използване за моделиране на състоянието на потребителски интерфейс:
sealed class UiState {
object Loading : UiState() // Състояние на зареждане
data class Success(val data: String) : UiState() // Успешно получаване на данни
data class Error(val message: String) : UiState() // Грешка
}
Използване в when-израз:
fun handleUiState(state: UiState): String {
return when (state) {
UiState.Loading -> "Зареждане на данни..."
is UiState.Success -> "Данните са успешно заредени: ${state.data}"
is UiState.Error -> "Грешка: ${state.message}"
}
}
Предимства:
- Безопасност на типа: компилаторът проверява дали всички възможни подкласове са обработени.
- Четливост: ясно показва кои варианти на данни или състояния могат да съществуват.
- Удобство: улеснява работата с
when-изрази.