Kotlin Objektdeklarationer och uttryck

I den här artikeln lär du dig om objektdeklarationer (singletons) och objektuttryck med hjälp av exempel.

Objektdeklarationer

Singleton är ett objektorienterat mönster där en klass bara kan ha en instans (objekt).

Till exempel arbetar du med ett program som har SQL-databasbackend. Du vill skapa en anslutningspool för att komma åt databasen medan du använder samma anslutning för alla klienter. För detta kan du skapa anslutningen genom singleton-klass så att varje klient får samma anslutning.

Kotlin är ett enkelt sätt att skapa singletons med objektdeklarationsfunktionen. För det används objektnyckelord.

 objekt SingletonExempel (… // klass av klass …)

Ovanstående kod kombinerar en klassdeklaration och en deklaration av en enda instans SingletonExempel på klassen.

En objektdeklaration kan innehålla egenskaper, metoder och så vidare. De får dock inte ha konstruktörer (vilket är vettigt). Varför?

På samma sätt som objekt i en normal klass kan du anropa metoder och få tillgång till egenskaper med hjälp av .notationen.

Exempel: Objektdeklaration

 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 kör programmet blir resultatet:

 b = 1 resultat = 12

Objektdeklaration kan ärva från klasser och gränssnitt på liknande sätt som normala klasser.

Singletons och beroendeinjektion

Objektdeklarationer kan vara användbara ibland. De är dock inte idealiska i stora programvarusystem som interagerar med många andra delar av systemet.

Rekommenderad läsning: Dependency Injection & Singleton Design mönster

Kotlin objekt Uttryck

Objektnyckelordet kan också användas för att skapa objekt av en anonym klass som kallas anonyma objekt. De används om du behöver skapa ett objekt med en liten modifiering av någon klass eller gränssnitt utan att deklarera en underklass för det. Till exempel ,

 window.addMouseListener (objekt: MouseAdapter () (åsidosätta fun mouseClicked (e: MouseEvent) (//…) åsidosätta fun mouseEntered (e: MouseEvent) (//…)))

(Exemplet är hämtat från den officiella Kotlin-dokumentsidan.)

Här förklaras ett anonymt objekt som utökar MouseAdapter-klassen. Programmet åsidosätter två MouseAdaptermetoder: mouseClicked()och mouseEntered().

Om det behövs kan du tilldela ett namn till det anonyma objektet och lagra det i en variabel. Till exempel,

 val obj = object: MouseAdapter () (åsidosätta fun mouseClicked (e: MouseEvent) (//…) åsidosätta fun mouseEntered (e: MouseEvent) (//…))

Exempel: Kotlin-objektuttryck

 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 kör programmet blir resultatet:

Äter mat. Prata med människor. Jag ber inte. Jag är ateist.

Här lagras anonymt objekt i variabel ateist som implementerar Personklass med pray()metod åsidosätts.

Om du implementerar en klass som har en konstruktör för att deklarera ett anonymt objekt måste du skicka lämpliga konstruktorparametrar. Till exempel,

 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 kör programmet blir resultatet:

namn: Jack, ålder: 29 Äta mat. Prata med människor. Jag ber inte. Jag är ateist.

Intressanta artiklar...