Šiame straipsnyje pavyzdžių pagalba sužinosite apie objektų deklaracijas (pavienius) ir objektų išraiškas.
Objekto deklaracijos
„Singleton“ yra į objektą orientuotas šablonas, kuriame klasė gali turėti tik vieną egzempliorių (objektą).
Pvz., Dirbate programoje, turinčioje SQL duomenų bazės vidinę programą. Norint sukurti duomenų bazę, reikia pakartotinai naudoti tą patį ryšį visiems klientams. Tam galite sukurti ryšį per pavienę klasę, kad kiekvienas klientas gautų tą patį ryšį.
„Kotlin“ suteikia paprastą būdą sukurti pavienius vienetus, naudojant objekto deklaravimo funkciją. Tam naudojamas objekto raktinis žodis.
objektas „SingletonExample“ (… // klasės kūnas …)
Aukščiau pateiktas kodas sujungia klasės deklaraciją ir vienos klasės „SingletonExample“ deklaraciją.
Objekto deklaracijoje gali būti ypatybės, metodai ir pan. Tačiau jiems neleidžiama turėti konstruktorių (kas yra prasminga). Kodėl?
Panašiai kaip įprastos klasės objektai, naudodami .
žymėjimą , galite iškviesti metodus ir pasiekti ypatybes .
Pavyzdys: objekto deklaracija
object Test ( private var a: Int = 0 var b: Int = 1 fun makeMe12(): Int ( a = 12 return a ) ) fun main(args: Array) ( val result: Int result = Test.makeMe12() println("b = $(Test.b)") println("result = $result") )
Kai paleisite programą, išvestis bus:
b = 1 rezultatas = 12
Objektų deklaravimas gali būti paveldimas iš klasių ir sąsajų panašiai kaip įprastos klasės.
Vienkartinės ir priklausomybės injekcijos
Objektų deklaracijos kartais gali būti naudingos. Tačiau jie nėra idealūs didelėse programinės įrangos sistemose, kurios sąveikauja su daugeliu kitų sistemos dalių.
Rekomenduojamas skaitymas: Priklausomybės injekcijos ir „Singleton“ dizaino modelis
Kotlino objekto išraiškos
Objekto raktinis žodis taip pat gali būti naudojamas kuriant anoniminės klasės objektus, vadinamus anoniminiais objektais. Jie naudojami, jei reikia sukurti nedidelio modifikavimo objektą kokioje nors klasėje ar sąsajoje, nedeklaruojant jam poklasio. Pavyzdžiui ,
window.addMouseListener (objektas: MouseAdapter () (perrašyti linksmą mouseClicked (e: MouseEvent) (//…) nepaisyti smagios mouseEntered (e: MouseEvent) (//…)))
(Pavyzdys paimtas iš oficialaus „Kotlin“ dokumentų puslapio.)
Čia anoniminis objektas yra paskelbtas pratęsiančiu „MouseAdapter“ klasę. Programa nepaiso dviejų MouseAdapter
metodų: mouseClicked()
ir mouseEntered()
.
Jei reikia, galite priskirti vardą anoniminiam objektui ir išsaugoti jį kintamajame. Pavyzdžiui,
val obj = object: MouseAdapter () (nepaisyti linksmo pelės paspaudimo (e: MouseEvent) (//…) nepaisyti linksmos pelėsEntered (e: MouseEvent) (//…))
Pavyzdys: Kotlino objekto išraiška
open class Person() ( fun eat() = println("Eating food.") fun talk() = println("Talking with people.") open fun pray() = println("Praying god.") ) fun main(args: Array) ( val atheist = object : Person() ( override fun pray() = println("I don't pray. I am an atheist.") ) atheist.eat() atheist.talk() atheist.pray() )
Kai paleisite programą, išvestis bus:
Maisto valgymas. Kalbėjimas su žmonėmis. Aš nesimeldžiu. Aš esu ateistas.
Čia anoniminis objektas saugomas kintamame ateiste, kuris įgyvendina Asmens klasę su pray()
metodu.
Jei diegiate klasę, turinčią konstruktorių anoniminiam objektui deklaruoti, turite perduoti tinkamus konstruktoriaus parametrus. Pavyzdžiui,
open class Person(name: String, age: Int) ( init ( println("name: $name, age: $age") ) fun eat() = println("Eating food.") fun talk() = println("Talking with people.") open fun pray() = println("Praying god.") ) fun main(args: Array) ( val atheist = object : Person("Jack", 29) ( override fun pray() = println("I don't pray. I am an atheist.") ) atheist.eat() atheist.talk() atheist.pray() )
Kai paleisite programą, išvestis bus:
vardas: Džekas, amžius: 29 Valgyti maistą. Kalbėjimas su žmonėmis. Aš nesimeldžiu. Aš esu ateistas.