În acest articol, veți învăța să creați clase de date în Kotlin. De asemenea, veți afla despre cerințele pe care trebuie să le îndeplinească clasa de date și funcționalitățile standard ale acestora.
Poate apărea o situație în care trebuie să creați o clasă exclusiv pentru a păstra date. În astfel de cazuri, puteți marca clasa ca data
să creați o clasă de date. De exemplu,
clasa de date Persoană (nume val: String, var var: Int)
Pentru această clasă, compilatorul generează automat:
copy()
funcțiaequals()
șihashCode()
perechea șitoString()
forma constructorului primarcomponentN()
funcții
Înainte de a vorbi în detaliu despre aceste caracteristici, să vorbim despre cerințele pe care trebuie să le îndeplinească o clasă de date.
Cerințe privind clasa de date Kotlin
Iată cerințele:
- Constructorul primar trebuie să aibă cel puțin un parametru.
- Parametrii constructorului primar trebuie să fie marcați fie
val
(numai în citire), fievar
(în citire-scriere). - Clasa nu poate fi deschisă, abstractă, interioară sau sigilată.
- Clasa poate extinde alte clase sau implementa interfețe. Dacă utilizați versiunea Kotlin înainte de 1.1, clasa poate implementa doar interfețe.
Exemplu: Clasa de date Kotlin
data class User(val name: String, val age: Int) fun main(args: Array) ( val jack = User("jack", 29) println("name = $(jack.name)") println("age = $(jack.age)") )
Când rulați programul, ieșirea va fi:
nume = jack vârsta = 29
Când declara o clasă de date, compilatorul generează automat mai multe funcții , cum ar fi toString()
, equals()
, hashcode()
etc în spatele scenei. Acest lucru vă ajută să vă mențineți codul concis. Dacă ați fi folosit Java, ar trebui să scrieți o mulțime de coduri.
Să folosim aceste funcții:
Copiere
Pentru o clasă de date, puteți crea o copie a unui obiect cu unele dintre proprietățile sale diferite folosind copy()
funcția. Iată cum funcționează:
data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) // using copy function to create an object val u2 = u1.copy(name = "Randy") println("u1: name = $(u1.name), name = $(u1.age)") println("u2: name = $(u2.name), name = $(u2.age)") )
Când rulați programul, ieșirea va fi:
u1: nume = Ioan, nume = 29 u2: nume = Randy, nume = 29
toString () metoda
Funcția toString () returnează o reprezentare șir a obiectului.
data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) println(u1.toString()) )
Când rulați programul, ieșirea va fi:
Utilizator (nume = Ioan, vârstă = 29)
hashCode () și egal ()
hasCode()
Metoda returneaza codul hash pentru obiect. Dacă două obiecte sunt egale, hashCode()
produce același rezultat întreg. Citire recomandată: hashCode ()
Cele equals()
revine true
dacă două obiecte sunt egale (are aceeași hashCode()
). Dacă obiectele nu sunt egale, equals()
se întoarce false
. Lectură recomandată: egal ()
data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) val u2 = u1.copy() val u3 = u1.copy(name = "Amanda") println("u1 hashcode = $(u1.hashCode())") println("u2 hashcode = $(u2.hashCode())") println("u3 hashcode = $(u3.hashCode())") if (u1.equals(u2) == true) println("u1 is equal to u2.") else println("u1 is not equal to u2.") if (u1.equals(u3) == true) println("u1 is equal to u3.") else println("u1 is not equal to u3.") )
Când rulați programul, ieșirea va fi:
u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 este egal cu u2. u1 nu este egal cu u3.
Declarații de destructurare
Puteți distruge un obiect într-un număr de variabile folosind declarația de distrugere. De exemplu:
clasa de date Utilizator (nume val: Șir, vârstă val: Int, sex sex: Șir) fun main(args: Array) ( val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") )
Când rulați programul, ieșirea va fi:
nume = Ioan vârsta = 29 sex = Bărbat
Acest lucru a fost posibil deoarece compilatorul generează componentN()
funcții toate proprietățile pentru o clasă de date. De exemplu:
data class User(val name: String, val age: Int, val gender: String) fun main(args: Array) ( val u1 = User("John", 29, "Male") println(u1.component1()) // John println(u1.component2()) // 29 println(u1.component3()) // "Male" )
Când rulați programul, ieșirea va fi:
Ioan 29 Bărbat