Clasa de date Kotlin

Î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 datasă 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ția equals()și hashCode()perechea și toString()forma constructorului primar
  • componentN() 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), fie var(î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 truedacă 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

Articole interesante...