Sobes.tech
Middle

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 în when fără ramura else.

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.