Sobes.tech
Junior

Cum funcționează clasele de date în Kotlin?

sobes.tech AI

Răspuns de la AI

Clasele de date în Kotlin sunt utilizate pentru stocarea datelor. Compilatorul generează automat metodele standard:

  • equals(): Compară instanțele pe baza valorilor proprietăților lor.
  • hashCode(): Generează un cod hash bazat pe valorile proprietăților.
  • toString(): Returnează o reprezentare în șir care include numele și valorile tuturor proprietăților.
  • copy(): Creează o copie a obiectului, modificând dacă este necesar valorile proprietăților indicate.
  • componentN(): Metode pentru destrukturare (descompunerea obiectului în proprietăți individuale).
// Exemplu de clasă de date
data class User(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    val user3 = User("Bob", 25)

    // equals()
    println(user1 == user2) // true
    println(user1 == user3) // false

    // toString()
    println(user1.toString()) // User(name=Alice, age=30)

    // copy()
    val user4 = user1.copy(age = 31)
    println(user4) // User(name=Alice, age=31)

    // componentN() și destrukturare
    val (name, age) = user1
    println("Nume: $name, Vârstă: $age") // Nume: Alice, Vârstă: 30
}

Puncte cheie:

  • Toate proprietățile definite în constructorul principal trebuie să fie val sau var.
  • Clasele de date nu pot fi abstract, open, sealed sau inner.
  • Clasele de date pot moșteni alte clase sau pot implementa interfețe.
  • Proprietățile declarate în afara constructorului principal nu participă la generarea metodelor standard.
Metodă Descriere
equals() Compară proprietățile din constructorul principal.
hashCode() Generează un hash bazat pe proprietățile din constructorul principal.
toString() Afișează o reprezentare în șir a proprietăților din constructorul principal.
copy() Creează o copie superficială cu posibilitatea de a modifica proprietățile.
componentN() Acces la proprietăți în ordinea declarației lor în constructor.

Clasele de date simplifică semnificativ lucrul cu POJO (Plain Old Java Object) sau DTO (Data Transfer Object), reducând codul boilerplate.