Middle
За какво се използват data класовете и sealed класовете в Kotlin?
sobes.tech AI
Отговор от AI
Класовете данни опростяват създаването на класове, предназначени само за съхранение на данни. Компилаторът автоматично генерира за тях:
equals()hashCode()toString()copy()componentN()за деструктуриране
класа данни User(val име: String, val възраст: Int)
// Използване
val user = User("Alice", 30)
println(user) // Показва User(име=Alice, възраст=30)
val user2 = user.copy(възраст = 31)
val (име, възраст) = user // Деструктуриране
Затворените класове (sealed) представляват ограничена йерархия на класове, където всички възможни подкласове са известни по време на компилация. Това позволява използването им в изрази when без блок else, гарантирайки пълна проверка на всички възможности.
затворен клас Result {
данна клас Success(val данни: String) : Result()
данна клас Error(val съобщение: String) : Result()
обект Loading : Result() // Обект, тъй като няма параметри
}
fun handleResult(result: Result) {
when (result) {
is Result.Success -> println("Успех: ${result.данни}")
is Result.Error -> println("Грешка: ${result.съобщение}")
Result.Loading -> println("Зареждане...")
}
}
Сравнение:
| Характеристика | Данен клас | Затворен клас |
|---|---|---|
| Цел | Съхранение на данни | Ограничена йерархия на класове |
| Възможности | Автоматично генериране на методи | Пълна проверка в when |
| Подкласове | Без специфични ограничения | Трябва да са в същия файл или модул |
| Използване | Модели на данни, DTO | Представяне на състояния, събития, варианти |