Kotlin kivitelezők és inicializátorok (példákkal)

Ebben a cikkben a Kotlin-i kivitelezőkről (elsődleges és másodlagos kivitelezőkről), valamint az inicializáló blokkokról tudhat meg példákat.

A konstruktor az osztály tulajdonságainak inicializálásának tömör módja.

Ez egy speciális tagfüggvény, amelyet akkor hívnak meg, amikor egy objektumot példányosítanak (létrehoznak). Azonban hogyan működnek Kotlinban, kissé más.

Kotlinban két kivitelező létezik:

  • Elsődleges konstruktor - tömör módszer az osztály inicializálására
  • Másodlagos konstruktor - további inicializálási logikát tesz lehetővé

Elsődleges kivitelező

Az elsődleges konstruktor az osztályfejléc része. Íme egy példa:

 class Person (val firstName: String, var age: Int) (// osztálytest)

A blokk-kód körülvéve zárójelben az elsődleges kivitelező: (val firstName: String, var age: Int).

A konstruktor két tulajdonságot deklarált: firstName(csak olvasható tulajdonság, amint azt a kulcsszóval deklarálják val) és age(írás-olvasás tulajdonság, amint azt kulcsszóval deklarálják var).

Példa: Elsődleges kivitelező

 fun main(args: Array) ( val person1 = Person("Joe", 25) println("First Name = $(person1.firstName)") println("Age = $(person1.age)") ) class Person(val firstName: String, var age: Int) ( )

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

 Keresztnév = Joe életkor = 25

Amikor Personlétrehozzák az osztály objektumát , "Joe"és az 25értékeket úgy adják át, mintha Personegy függvény lenne.

Ez inicializálja firstNameés agetulajdonságait person1 kifogás "Joe"és 25rendre.

Az elsődleges konstruktorok más módon is használhatók.

Elsődleges konstruktor és inicializáló blokkok

Az elsődleges konstruktor szintaxisa korlátozott, kódot nem tartalmazhat.

Az inicializáló kód (nem csak a tulajdonságok inicializálására szolgáló kód) elhelyezéséhez inicializáló blokkot használnak. A initkulcsszó előtagja . Módosítsuk a fenti példát az inicializáló blokkkal:

 fun main(args: Array) ( val person1 = Person("joe", 25) ) class Person(fName: String, personAge: Int) ( val firstName: String var age: Int // initializer block init ( firstName = fName.capitalize() age = personAge println("First Name = $firstName") println("Age = $age") ) )

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

 First Name = Joe Age = 25

Itt a zárójelben lévő fName és personAge paraméterek elfogadják az értékeket "Joe", 25illetve a person1 objektum létrehozásakor. Az fName és a personAge azonban a varvagy használata nélkül használatos val, és nem az Personosztály tulajdonságai .

Az Personosztálynak két tulajdonsága van: firstName, és az életkor meg van adva.

Amikor person1objektum jön létre, kód belsejében inicializálóblokkban kerül végrehajtásra. Az inicializáló blokk nem csak inicializálja tulajdonságait, hanem ki is nyomtatja azokat.

Itt van egy másik módszer ugyanazon feladat végrehajtására:

 fun main(args: Array) ( val person1 = Person("joe", 25) ) class Person(fName: String, personAge: Int) ( val firstName = fName.capitalize() var age = personAge // initializer block init ( println("First Name = $firstName") println("Age = $age") ) )

A konstruktor paraméterének és tulajdonságának megkülönböztetéséhez különböző neveket használnak (fNév és keresztnév, valamint személyKor és életkor). Gyakoribb, hogy a _firstName és a _age értékeket használják a konstruktor paramétereinek teljesen más neve helyett. Például:

 class Person (_firstName: String, _age: Int) (val firstName = _firstName.capitalize () var age = _age // inicializáló blokk init (…)) 

Alapértelmezett érték az Elsődleges Konstruktorban

Alapértelmezett értéket adhat meg a konstruktor paramétereinek (hasonlóan, mint az alapértelmezett argumentumok megadása a függvényekhez). Például:

 fun main(args: Array) ( println("person1 is instantiated") val person1 = Person("joe", 25) println("person2 is instantiated") val person2 = Person("Jack") println("person3 is instantiated") val person3 = Person() ) class Person(_firstName: String = "UNKNOWN", _age: Int = 0) ( val firstName = _firstName.capitalize() var age = _age // initializer block init ( println("First Name = $firstName") println("Age = $age") ) )

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

 Keresztnév = Joe életkor = 25 ember2 példányos keresztnév = Jack életkor = 0 személy3 példányos keresztnév = Ismeretlen életkor = 0

Kotlin másodépítő

Kotlinban egy osztály tartalmazhat egy vagy több másodlagos konstruktort is. constructorKulcsszóval jönnek létre .

A másodlagos kivitelezők nem annyira elterjedtek Kotlinban. A másodlagos konstruktor leggyakoribb használata akkor merül fel, ha olyan osztályt kell kibővíteni, amely több konstruktort biztosít, amelyek különböző módon inicializálják az osztályt. Mielőtt megtanulja, feltétlenül ellenőrizze a Kotlin örökséget.

Így hozhat létre másodlagos konstruktort Kotlinban:

 class Log (konstruktor (adatok: String) (// valamilyen kód) konstruktor (adatok: String, numberOfData: Int) (// néhány kód))

Itt az Logosztálynak két másodlagos konstruktora van, de elsődleges konstruktora nincs.

Hosszabbíthatja az osztályt:

 class Log (konstruktor (adatok: String) (// kód) konstruktor (adatok: String, numberOfData: Int) (// kód)) class AuthLog: Napló (konstruktor (adatok: String): szuper (adatok) (// kód ) konstruktor (adatok: String, numberOfData: Int): szuper (data, numberOfData) (// kód))

Itt a származtatott osztály AuthLogkonstruktorai hívják az alaposztály megfelelő konstruktorát Log. Erre super()használják.

Kotlinban ugyanezen osztály másik konstruktorától (például a Java-ból) is hívhatunk konstruktort this().

 class AuthLog: Napló (konstruktor (adatok: String): ez (adatok, 10) (// kód) konstruktor (adatok: String, numberOfData: Int): szuper (adatok, numberOfData) (// kód)) 

Példa: Kotlin másodlagos kivitelező

 fun main(args: Array) ( val p1 = AuthLog("Bad Password") ) open class Log ( var data: String = "" var numberOfData = 0 constructor(_data: String) ( ) constructor(_data: String, _numberOfData: Int) ( data = _data numberOfData = _numberOfData println("$data: $numberOfData times") ) ) class AuthLog: Log ( constructor(_data: String): this("From AuthLog -> " + _data, 10) ( ) constructor(_data: String, _numberOfData: Int): super(_data, _numberOfData) ( ) )

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

 Az AuthLogból -> Rossz jelszó: 10-szer

Megjegyzés: A másodlagos konstruktornak inicializálnia kell az alaposztályt, vagy át kell ruháznia egy másik konstruktorra (mint a fenti példában), ha az osztálynak nincs elsődleges konstruktora.

érdekes cikkek...