Kotlina datu klase

Šajā rakstā jūs iemācīsities izveidot datu klases Kotlinā. Jūs uzzināsiet arī par prasībām, kurām jāatbilst datu klasei, un to standarta funkcijām.

Var rasties situācija, kad jums ir jāizveido klase tikai datu glabāšanai. Šādos gadījumos jūs varat atzīmēt klasi kā datadatu klases izveidi. Piemēram,

 datu klase Persona (vārda nosaukums: virkne, vecums: vidējais)

Šai klasei kompilators automātiski ģenerē:

  • copy()funkciju, equals()un hashCode()pāris, un toString()forma primārā konstruktoru
  • componentN() funkcijas

Pirms detalizēti runāt par šīm funkcijām, parunāsim par prasībām, kas datu klasei jāatbilst.

Prasības Kotlin datu klasei

Šīs ir prasības:

  • Primārajam konstruktoram jābūt vismaz vienam parametram.
  • Primārā konstruktora parametriem jābūt atzīmētiem kā val(tikai lasāms) vai var(lasāms-rakstāms).
  • Klase nevar būt atvērta, abstrakta, iekšēja vai aizzīmogota.
  • Klase var paplašināt citas klases vai ieviest saskarnes. Ja izmantojat Kotlin versiju pirms 1.1, klase var ieviest tikai saskarnes.

Piemērs: Kotlin datu klase

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

Palaidot programmu, izeja būs:

 vārds = džeka vecums = 29

Kad paziņot datu klasi, tad kompilators automātiski ģenerē vairākas funkcijas, piemēram, toString(), equals(), hashcode()uc aizkulisēs. Tas palīdz saglabāt koda kodolīgumu. Ja jūs būtu izmantojis Java, jums vajadzētu uzrakstīt daudz katla koda.

Izmantosim šīs funkcijas:

Kopēšana

Datu klasei, izmantojot copy()funkciju , varat izveidot objekta kopiju ar dažām tā īpašībām . Lūk, kā tas darbojas:

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

Palaidot programmu, izeja būs:

 u1: vārds = Jānis, vārds = 29 u2: vārds = Rendijs, vārds = 29

toString () metode

Funkcija toString () atgriež objekta virknes attēlojumu.

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

Palaidot programmu, izeja būs:

 Lietotājs (vārds = Jānis, vecums = 29)

hashCode () un vienāds ar ()

hasCode()Metode atgriež hash kodu objektu. Ja divi objekti ir vienādi, hashCode()iegūst to pašu vesela skaitļa rezultātu. Ieteicamā literatūra: hashCode ()

Par equals()atgriežas trueja diviem objektiem ir vienādas (ir tas pats hashCode()). Ja objekti nav vienādi, equals()atgriežas false. Ieteicamā literatūra: vienāds ()

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

Palaidot programmu, izeja būs:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 ir vienāds ar u2. u1 nav vienāds ar u3.

Pārstrukturēšanas deklarācijas

Izmantojot destruktīvo deklarāciju, objektu var sadalīt vairākos mainīgajos. Piemēram:

 datu klase Lietotājs (vārda nosaukums: virkne, vecums: vidējs, dzimuma dzimums: virkne) fun main(args: Array) ( val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") )

Palaidot programmu, izeja būs:

 vārds = Jāņa vecums = 29 dzimums = vīrietis

Tas bija iespējams, jo kompilators ģenerē componentN()visas datu klases īpašības. Piemēram:

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

Palaidot programmu, izeja būs:

 Jānis 29 Vīrietis

Interesanti raksti...