Sobes.tech
Middle

Kaip naudoti uždaras klases hierarchijoms modeliuoti Kotlin?

sobes.tech AI

Atsakymas iš AI

Užrakintosios klasės (sealed classes) naudojamos ribotų paveldėjimo hierarchijų atvaizdavimui, kuriose visi galimi pogrupiai yra žinomi kompiliavimo metu.

Pagrindinės savybės:

  • Visi tiesioginiai pogrupiai turi būti tame pačiame faile kaip ir užrakinta klasė (iki Kotlin 1.5). Nuo Kotlin 1.5 jie gali būti bet kuriame to paties kompiliavimo faile.
  • Užrakintos klasės pogrupiai gali būti įprasti klasės, duomenų klasės, objektų deklaracijos arba kitos užrakintos klasės.
  • Užrakintos klasės konstruktorius pagal numatytuosius nustatymus yra privačias; kiti modifikatoriai (public, protected, internal) nėra leidžiami.
  • Leidžia naudoti išsamų (exhaustive) analizę when išraiškose, užtikrinant, kad būtų apdorotos visos galimos galimybės ir pašalinama else šaka.

Pavyzdys, kaip modeliuoti naudotojo sąsajos būseną:

sealed class UiState {
    object Loading : UiState() // Įkėlimo būsena
    data class Success(val data: String) : UiState() // Sėkmingas duomenų gavimas
    data class Error(val message: String) : UiState() // Klaida
}

Naudojimas when išraiškoje:

fun handleUiState(state: UiState): String {
    return when (state) {
        UiState.Loading -> "Duomenys įkeliami..."
        is UiState.Success -> "Duomenys sėkmingai įkelti: ${state.data}"
        is UiState.Error -> "Klaida: ${state.message}"
    }
}

Privalumai:

  • Tipų saugumas: kompiliatorius tikrina, ar apdorotos visos galimos pogrupiai.
  • Skaitymas: aiškiai rodo, kokie duomenų ar būsenų variantai gali būti.
  • Patogumas: supaprastina darbą su when išraiškomis.