Kotlin Object Declarations and Expressions

I denne artikkelen vil du lære om objektdeklarasjoner (singletons) og objektuttrykk ved hjelp av eksempler.

Objektdeklarasjoner

Singleton er et objektorientert mønster der en klasse bare kan ha en forekomst (objekt).

For eksempel jobber du med et program som har SQL-database-backend. Du vil opprette en tilkoblingsgruppe for å få tilgang til databasen mens du bruker den samme tilkoblingen for alle klienter. For dette kan du opprette forbindelsen gjennom singleton-klassen slik at hver klient får den samme tilkoblingen.

Kotlin gir en enkel måte å lage singletons ved hjelp av objektdeklarasjonsfunksjonen. For det brukes objektnøkkelord.

 objekt SingletonExample (… // body of class…)

Ovennevnte kode kombinerer en klassedeklarasjon og en erklæring om en enkelt forekomst Singleton Eksempel på klassen.

En objekterklæring kan inneholde egenskaper, metoder og så videre. Imidlertid har de ikke lov til å ha konstruktører (noe som gir mening). Hvorfor?

I likhet med objekter i en normal klasse, kan du ringe metoder og få tilgang til egenskaper ved å bruke .notasjonen.

Eksempel: Objektdeklarasjon

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

Når du kjører programmet, vil utdataene være:

 b = 1 resultat = 12

Objektdeklarasjon kan arve fra klasser og grensesnitt på en lignende måte som normale klasser.

Singletons og avhengighetsinjeksjon

Objektdeklarasjoner kan være nyttige noen ganger. Imidlertid er de ikke ideelle i store programvaresystemer som samhandler med mange andre deler av systemet.

Anbefalt lesing: Dependency Injection & Singleton Design mønster

Kotlin objekt Uttrykk

Objektnøkkelordet kan også brukes til å lage objekter av en anonym klasse kjent som anonyme objekter. De brukes hvis du trenger å lage et objekt med en liten modifisering av noen klasse eller grensesnitt uten å erklære en underklasse for det. For eksempel ,

 window.addMouseListener (objekt: MouseAdapter () (overstyr moro museklikket (e: MouseEvent) (//…) overstyr moro musEntered (e: MouseEvent) (//…)))

(Eksemplet er hentet fra den offisielle Kotlin-dokumentsiden.)

Her blir et anonymt objekt erklært som utvider MouseAdapter-klassen. Programmet overstyrer to MouseAdaptermetoder: mouseClicked()og mouseEntered().

Om nødvendig kan du tilordne et navn til det anonyme objektet og lagre det i en variabel. For eksempel,

 val obj = object: MouseAdapter () (overstyr moro museklikket (e: MouseEvent) (//…) overstyr moro mouseEntered (e: MouseEvent) (//…))

Eksempel: Kotlin Object Expression

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

Når du kjører programmet, vil utdataene være:

Spiser mat. Å snakke med mennesker. Jeg ber ikke. Jeg er ateist.

Her lagres anonymt objekt i variabel ateist som implementerer Personklasse med pray()metode overstyres.

Hvis du implementerer en klasse som har en konstruktør til å erklære et anonymt objekt, må du sende passende konstruktorparametere. For eksempel,

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

Når du kjører programmet, vil utdataene være:

navn: Jack, alder: 29 Å spise mat. Å snakke med mennesker. Jeg ber ikke. Jeg er ateist.

Interessante artikler...