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 data
lé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 ahashCode()
pár, éstoString()
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ó) vagyvar
(í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