Sobes.tech
Middle

როგორ გამოვიყენოთ დახურული კლასები ჰიეარაქიების მოდელირებისთვის Kotlin-ში?

sobes.tech AI

პასუხი AI-სგან

Закрытые классы (sealed classes) колдонулат чектелген мурас хиерархияларын көрсөтүү үчүн, анда бардык мүмкүн болгон подкласстар компиляция учурунда белгилүү болот.

Негизги өзгөчөлүктөрү:

  • Бардык түздөн-түз подкласстар ошол эле файлда болушу керек (Kotlin 1.5 чейин). Kotlin 1.5тен кийин, алар кез келген файлда болушу мүмкүн ошол эле компиляцияда.
  • Закрытые класстардын подкласстары жөнөкөй класстар, data-класстар, object декларациялары же башка жабык класстар болушу мүмкүн.
  • Закрытые класстардын конструктору алдын ала жеке; башка модификаторлор (public, protected, internal) уруксат берилбейт.
  • When билдирүүлөрүндө толук (exhaustive) анализ жүргүзүүгө мүмкүндүк берет, бул бардык мүмкүн болгон варианттарды иштетүүнү камсыздайт жана 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 билдирүүлөрү менен иштөөнү жеңилдетет.