Vorbește despre clasele de date și clasele sigilate în Kotlin.
sobes.tech AI
Răspuns de la AI
Clasele de date în Kotlin sunt utilizate pentru stocarea datelor. Ele generează automat metode utile precum equals(), hashCode(), toString(), copy(), precum și componente pentru destructurare.
// Exemplu de clasă de date
data class User(val name: String, val age: Int)
Clasele sealed sunt utilizate pentru a reprezenta o ierarhie limitată de clase. Toate subclasele trebuie definite în același fișier cu clasa sealed (în Kotlin 1.5+ această restricție a fost relaxată). Acest lucru permite compilatorului să asigure o acoperire exhaustivă a subclasei, de exemplu, într-o expresie when.
// Exemplu de clasă sealed
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result()
}
// Exemplu de utilizare a clasei sealed într-o expresie when
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Succes: ${result.data}")
is Result.Error -> println("Eroare: ${result.message}")
Result.Loading -> println("Se încarcă...")
}
}
Diferențele principale:
- Scop: clase de date - stocarea datelor, clase sealed - restricționarea ierarhiei de clase.
- Metode generate: clasele de date generează metode standard pentru date, cele sealed - nu.
- Restricția subclasei: clasele sealed impun restricții asupra declarării subclasei, cele de date - nu.
- Acoperire exhaustivă în
when: compilatorul Kotlin poate verifica acoperirea exhaustivă a subclasei sealed înwhenfără ramuraelse.
Atât clasele sealed, cât și cele de date pot fi abstracte, însă clasele de date nu pot fi open (deoarece sunt final implicit) și nu pot implementa direct metode open (doar prin interfețe sau clase abstracte). Clasele sealed sunt, implicit, abstracte, iar constructorii lor sunt privați.