Kotlin adatosztály

Ebben a cikkben megtanulhat adatosztályokat létrehozni Kotlinban. Ezenkívül megismerheti azokat a követelményeket, amelyeknek az adatosztálynak meg kell felelnie, és azok szabványos funkcióit.

Előfordulhat olyan helyzet, amikor egy osztályt kell létrehoznia kizárólag az adatok tárolására. Ilyen esetekben megjelölheti az osztályt adatosztály datalétrehozására. Például,

 adatosztály Személy (val név: String, változó kor: Int)

Ehhez az osztályhoz a fordító automatikusan létrehozza:

  • copy()funkciót, equals()és a hashCode()pár, és toString()formája a primer kivitelező
  • componentN() funkciókat

Mielőtt részletesen beszélnénk ezekről a funkciókról, beszéljünk azokról a követelményekről, amelyeknek egy adatosztálynak meg kell felelnie.

Kotlin adatosztály követelmények

Itt vannak a követelmények:

  • Az elsődleges konstruktornak legalább egy paraméterrel kell rendelkeznie.
  • Az elsődleges konstruktor paramétereit vagy val(csak olvasható) vagy var(írás-írás) jelöléssel kell ellátni .
  • Az osztály nem lehet nyitott, elvont, belső vagy lezárt.
  • Az osztály kiterjeszthet más osztályokat, vagy interfészeket valósíthat meg. Ha a Kotlin verziót 1.1 előtt használja, akkor az osztály csak interfészeket tud megvalósítani.

Példa: Kotlin Data Class

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

A program futtatásakor a kimenet a következő lesz:

 név = jack életkor = 29

Amikor kijelentik adatokat osztály, a fordító automatikusan generál több funkciót, mint például toString(), equals(), hashcode()stb. A színfalak mögött. Ez segít abban, hogy a kód tömör legyen. Ha Java-t használtál volna, akkor sok kazán kódot kell írnod.

Használjuk ezeket a függvényeket:

Másolás

Adatosztály esetén a copy()függvény használatával létrehozhat egy objektum másolatát, amelynek egyes tulajdonságai eltérnek . Így működik:

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

A program futtatásakor a kimenet a következő lesz:

 u1: név = John, név = 29 u2: név = Randy, név = 29

toString () metódus

A toString () függvény az objektum karakterlánc-reprezentációját adja vissza.

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

A program futtatásakor a kimenet a következő lesz:

 Felhasználó (név = John, életkor = 29)

hashCode () és egyenlő ()

A hasCode()metódus kivonatkódot ad vissza az objektumhoz. Ha két objektum egyenlő, hashCode()ugyanazt az egész eredményt adja. Ajánlott olvasmány: hashCode ()

A equals()hozamok true, ha két objektum azonos (van ugyanaz hashCode()). Ha az objektumok nem egyenlőek, akkor equals()visszatér false. Ajánlott olvasmány: egyenlő ()

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

A program futtatásakor a kimenet a következő lesz:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 egyenlő u2. u1 nem egyenlő u3-val.

Szerkezetátalakítási nyilatkozatok

Az objektumot számos változóra bonthatja a destruktív deklaráció segítségével. Például:

 adatosztály Felhasználó (val név: String, val életkor: Int, val nem: 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") )

A program futtatásakor a kimenet a következő lesz:

 név = János életkor = 29 nem = férfi

Ez azért volt lehetséges, mert a fordító componentN()minden tulajdonságot létrehoz egy adatosztályhoz. Például:

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

A program futtatásakor a kimenet a következő lesz:

 János 29 Férfi

érdekes cikkek...