Котлин Дата Цласс

У овом чланку ћете научити да креирате класе података у Котлину. Такође ћете научити о захтевима које класа података мора да испуњава и њиховим стандардним функционалностима.

Може доћи до ситуације у којој је потребно створити класу искључиво за чување података. У таквим случајевима можете да означите класу као dataда креира класу података. На пример,

 класа података Особа (име вал: Стринг, вар аге: Инт)

За ову класу, компајлер аутоматски генерише:

  • copy()функција, equals()и hashCode()пар, и toString()облик примарног конструктора
  • componentN() функције

Пре него што детаљно разговарамо о овим карактеристикама, хајде да разговарамо о захтевима које класа података мора да испуњава.

Котлин захтеви за класу података

Ево захтева:

  • Примарни конструктор мора имати најмање један параметар.
  • Параметри примарног конструктора морају бити означени као val(само за читање) или var(за читање и писање).
  • Час не може бити отворен, апстрактан, унутрашњи или запечаћен.
  • Класа може проширити друге класе или имплементирати интерфејсе. Ако користите верзију Котлин пре 1.1, класа може да имплементира само интерфејсе.

Пример: Котлин класа података

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

Када покренете програм, излаз ће бити:

 име = старост џека = 29

Када прогласи класу података, компајлер аутоматски генерише неколико функција, као што су toString(), equals(), hashcode()итд иза сцене. Ово вам помаже да будете сажети. Да сте користили Јаву, требало би да напишете пуно узорка.

Користимо ове функције:

Копирање

За класу података можете да креирате копију објекта са неким од његових својстава која се разликују помоћу copy()функције. Ево како то функционише:

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

Када покренете програм, излаз ће бити:

 у1: име = Џон, име = 29 у2: име = Ренди, име = 29

метода тоСтринг ()

Функција тоСтринг () враћа представљање објекта у низу.

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

Када покренете програм, излаз ће бити:

 Корисник (име = Јохн, старост = 29)

хасхЦоде () и једнако ()

hasCode()Метод врати хеш код за објекат. Ако су два објекта једнака, hashCode()добија се исти цео резултат. Препоручено читање: хасхЦоде ()

У equals()враћа trueако два објекта су једнаки (има исти hashCode()). Ако објекти нису једнаки, equals()враћа се false. Препоручена литература: једнако ()

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

Када покренете програм, излаз ће бити:

у1 хасхцоде = 71750738 у2 хасхцоде = 71750738 у3 хасхцоде = 771732263 у1 је једнак у2. у1 није једнако у3.

Декларације о деструктурирању

Можете деструктурирати објекат у бројне променљиве помоћу деструктивне декларације. На пример:

 класа података Корисник (вал име: Стринг, вал старост: Инт, вал пол: Стринг) fun main(args: Array) ( val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") )

Када покренете програм, излаз ће бити:

 име = Јован доб = 29 пол = мушко

То је било могуће јер компајлер генерише componentN()функције сва својства за класу података. На пример:

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

Када покренете програм, излаз ће бити:

 Јован 29 мушки

Занимљиви Чланци...