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 uwhenbezelsegrane.
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.