Sobes.tech
Middle

Ispričaj mi o data klasama i sealed klasama u Kotlinu.

sobes.tech АИ

Одговор од АИ

Data klase u Kotlinu se koriste za skladištenje podataka. Automatski generišu korisne metode poput equals(), hashCode(), toString(), copy(), kao i komponente za destrukturiranje.

// Primer data klase
data class User(val name: String, val age: Int)

Seal klase se koriste za predstavljanje ograničene hijerarhije klasa. Sve podklase moraju biti definisane u istom fajlu kao i seal klasa (u Kotlinu 1.5+ ovo ograničenje je ublaženo). Ovo omogućava kompilatoru da obezbedi potpunu proveru podklasa, na primer, u izrazu when.

// Primer seal klase
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result()
}

// Primer korišćenja seal klase u izrazu `when`
fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Uspeh: ${result.data}")
        is Result.Error -> println("Greška: ${result.message}")
        Result.Loading -> println("Učitava se...")
    }
}

Glavne razlike:

  • Svrha: data klase - skladištenje podataka, seal klase - ograničenje hijerarhije klasa.
  • Generisane metode: data klase generišu standardne metode za podatke, seal klase - ne.
  • Ograničenje podklasa: seal klase nameću ograničenja na deklaraciju podklasa, data klase - ne.
  • Potpunost u when: Kotlin kompajler može proveriti potpunost podklasa seal klase u when bez else grane.

I seal i data klase mogu biti apstraktne, ali data klase ne mogu biti open (jer su podrazumevano final) i ne mogu direktno implementirati open metode (samo putem interfejsa ili apstraktnih klasa). Seal klase su, podrazumevano, apstraktne, a njihovi konstruktori su privatni.