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
valsauvar. - Clasele de date nu pot fi
abstract,open,sealedsauinner. - 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.