Kotlin-tietoluokka

Tässä artikkelissa opit luomaan dataluokkia Kotlinissa. Opit myös vaatimuksista, jotka tietoluokan on täytettävä, ja niiden vakiotoiminnoista.

Saattaa syntyä tilanne, jossa sinun on luotava luokka vain tietojen säilyttämiseksi. Tällaisissa tapauksissa voit merkitä luokan dataluomaan tietoluokan. Esimerkiksi,

 tietoluokka Henkilö (val-nimi: Merkkijono, vaihteleva ikä: Int)

Tälle luokalle kääntäjä luo automaattisesti:

  • copy()toiminto, equals()ja hashCode()pari, ja toString()muoto ensisijaisen rakentaja
  • componentN() toimintoja

Ennen kuin puhumme näistä ominaisuuksista yksityiskohtaisesti, puhutaan vaatimuksista, jotka tietoluokan on täytettävä.

Kotlin-tietoluokan vaatimukset

Tässä ovat vaatimukset:

  • Ensisijaisella rakentajalla on oltava vähintään yksi parametri.
  • Ensisijaisen rakentajan parametrit on merkittävä joko val(vain luku) tai var(luku-kirjoitus).
  • Luokka ei voi olla avoin, abstrakti, sisäinen tai sinetöity.
  • Luokka voi laajentaa muita luokkia tai toteuttaa rajapintoja. Jos käytät Kotlin-versiota ennen 1.1, luokka voi toteuttaa vain rajapintoja.

Esimerkki: Kotlin-tietoluokka

 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)") )

Kun suoritat ohjelmaa, tulos on:

 nimi = jack ikä = 29

Kun julistaa Dataluokka, kääntäjä luo automaattisesti useita toimintoja, kuten toString(), equals(), hashcode()jne kulissien takana. Tämä auttaa pitämään koodisi ytimekkäänä. Jos olisit käyttänyt Java-ohjelmaa, sinun olisi kirjoitettava paljon kattilakoodia.

Käytetään näitä toimintoja:

Kopiointi

Dataluokalle voit luoda kopion objektista, jonka ominaisuudet ovat erilaiset copy()funktion avulla. Näin se toimii:

 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)") )

Kun suoritat ohjelmaa, tulos on:

 u1: nimi = John, nimi = 29 u2: nimi = Randy, nimi = 29

toString () -menetelmä

ToString () -funktio palauttaa objektin merkkijonon.

 data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) println(u1.toString()) )

Kun suoritat ohjelmaa, tulos on:

 Käyttäjä (nimi = John, ikä = 29)

hashCode () ja on yhtä suuri ()

hasCode()Menetelmä palaa hajotuskoodilla objektin. Jos kaksi objektia on yhtä suuri, hashCode()tuottaa saman kokonaislukutuloksen. Suositeltava lukeminen: hashCode ()

equals()Palaa truejos kaksi objektia samoja (on sama hashCode()). Jos objektit eivät ole samanarvoisia, equals()palaa false. Suositeltava lukema: on yhtä suuri ()

 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.") )

Kun suoritat ohjelmaa, tulos on:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 on yhtä suuri kuin u2. u1 ei ole yhtä suuri kuin u3.

Uudelleenjärjestelyilmoitukset

Voit tuhota objektin useiksi muuttujiksi tuhoavan ilmoituksen avulla. Esimerkiksi:

 tietoluokka Käyttäjä (val-nimi: merkkijono, val-ikä: Int, val sukupuoli: Merkkijono) fun main(args: Array) ( val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") )

Kun suoritat ohjelmaa, tulos on:

 nimi = John ikä = 29 sukupuoli = mies

Tämä oli mahdollista, koska kääntäjä luo componentN()toiminnot kaikki ominaisuudet tietoluokalle. Esimerkiksi:

 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" )

Kun suoritat ohjelmaa, tulos on:

 Johannes 29 Mies

Mielenkiintoisia artikkeleita...