Sobes.tech
Middle

Za šta se koriste data klase i sealed klase u Kotlinu?

sobes.tech АИ

Одговор од АИ

Klase podataka pojednostavljuju kreiranje klasa namenjenih isključivo za skladištenje podataka. Prevodilac automatski generiše za njih:

  • equals()
  • hashCode()
  • toString()
  • copy()
  • componentN() za destrukturiranje
podatkasta klasa User(val ime: String, val starost: Int)

// Upotreba
val user = User("Alice", 30)
println(user) // Prikazuje User(ime=Alice, starost=30)
val user2 = user.copy(starost = 31)
val (ime, starost) = user // Destrukturiranje

Zapečaćene klase (sealed) predstavljaju ograničenu hijerarhiju klasa, gde su sve moguće podklase poznate tokom kompilacije. To omogućava njihovu upotrebu u izrazima when bez else bloka, garantujući potpunu proveru svih opcija.

zapečaćena klasa Result {
    data class Success(val podaci: String) : Result()
    data class Error(val poruka: String) : Result()
    objekat Loading : Result() // Objekat, jer nema parametara
}

fun handleResult(result: Result) {
    when (result) {
        is Result.Success -> println("Uspeh: ${result.podaci}")
        is Result.Error -> println("Greška: ${result.poruka}")
        Result.Loading -> println("Učitava se...")
    }
}

Uporedjenje:

Osobina Klasa podataka Zapečaćena klasa
Svrha Čuvanje podataka Ograničena hijerarhija klasa
Mogućnosti Automatsko generisanje metoda Potpuna kontrola u when
Podklase Bez specifičnih ograničenja Moraju biti u istom fajlu ili modulu
Upotreba Modeli podataka, DTO Predstavljanje stanja, događaja, varijanti