Dátová trieda Kotlin

V tomto článku sa naučíte vytvárať triedy údajov v Kotline. Dozviete sa tiež o požiadavkách, ktoré musí spĺňať dátová trieda, a o ich štandardných funkciách.

Môže nastať situácia, keď budete musieť vytvoriť triedu iba na uchovanie údajov. V takýchto prípadoch môžete triedu označiť ako datavytvorenie dátovej triedy. Napríklad,

 dátová trieda Osoba (názov hodnoty: String, vek: Int)

Pre túto triedu kompilátor automaticky generuje:

  • copy()funkcia equals()a hashCode()pár a toString()forma primárneho konštruktora
  • componentN() funkcie

Predtým, ako sa budeme podrobne baviť o týchto funkciách, poďme si povedať o požiadavkách, ktoré musí spĺňať dátová trieda.

Požiadavky na dátovú triedu Kotlin

Tu sú požiadavky:

  • Primárny konštruktor musí mať aspoň jeden parameter.
  • Parametre primárneho konštruktora musia byť označené ako val(iba na čítanie) alebo var(na čítanie a na zápis).
  • Trieda nemôže byť otvorená, abstraktná, vnútorná alebo zapečatená.
  • Trieda môže rozširovať ďalšie triedy alebo implementovať rozhrania. Ak používate verziu Kotlin pred 1.1, trieda môže implementovať iba rozhrania.

Príklad: Kotlinská dátová trieda

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

Po spustení programu bude výstup:

 meno = jack vek = 29

Keď deklarujete triedu dát, kompilátor automaticky generuje niekoľko funkcií, napríklad toString(), equals(), hashcode()atď zákulisí. To vám pomôže udržať váš kód stručný. Keby ste používali Java, museli by ste napísať veľa štandardných kódov.

Využime tieto funkcie:

Kopírovanie

Pre dátovú triedu môžete vytvoriť kópiu objektu s rôznymi vlastnosťami odlišnými pomocou copy()funkcie. Funguje to takto:

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

Po spustení programu bude výstup:

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

metóda toString ()

Funkcia toString () vráti reťazcovú reprezentáciu objektu.

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

Po spustení programu bude výstup:

 Používateľ (meno = John, vek = 29)

hashCode () a equals ()

hasCode()Metóda vráti hash kód pre daný objekt. Ak sú dva objekty rovnaké, hashCode()vytvorí rovnaký celočíselný výsledok. Odporúčané čítanie: hashCode ()

Tieto equals()vráti true-Li dva objekty sú si rovné (má rovnaký hashCode()). Ak objekty nie sú rovnaké, equals()vráti sa false. Odporúčané čítanie: rovná sa ()

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

Po spustení programu bude výstup:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 sa rovná u2. u1 sa nerovná u3.

Vyhlásenia o deštrukturalizácii

Objekt môžete zničiť na množstvo premenných pomocou deštrukčnej deklarácie. Napríklad:

 dátová trieda User (názov valca: String, vek valca: Int, val rod: String) fun main(args: Array) ( val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") )

Po spustení programu bude výstup:

 meno = John vek = 29 pohlavie = muž

To bolo možné, pretože kompilátor generuje componentN()funkcie všetky vlastnosti pre dátovú triedu. Napríklad:

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

Po spustení programu bude výstup:

 Ján 29 Muž

Zaujímavé články...