Deklarace a výrazy objektů Kotlin

V tomto článku se na příkladech dozvíte o deklaracích objektů (singletonech) a výrazech objektů.

Deklarace objektů

Singleton je objektově orientovaný vzor, ​​kde třída může mít pouze jednu instanci (objekt).

Například pracujete s aplikací, která má backend databáze SQL. Chcete vytvořit fond připojení pro přístup k databázi a opětovné použití stejného připojení pro všechny klienty. K tomu můžete vytvořit připojení prostřednictvím třídy singleton, aby každý klient získal stejné připojení.

Kotlin poskytuje snadný způsob vytváření singletonů pomocí funkce deklarace objektu. K tomu se používá klíčové slovo objektu.

 objekt SingletonExample (… // tělo třídy…)

Výše uvedený kód kombinuje deklaraci třídy a deklaraci jedné instance SingletonExample třídy.

Deklarace objektu může obsahovat vlastnosti, metody atd. Není jim však dovoleno mít konstruktory (což dává smysl). Proč?

Podobně jako u objektů normální třídy můžete volat metody a přistupovat k vlastnostem pomocí .notace.

Příklad: Deklarace objektu

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

Když spustíte program, výstup bude:

 b = 1 výsledek = 12

Deklarace objektu může dědit z tříd a rozhraní podobným způsobem jako normální třídy.

Singletony a injekce závislostí

Deklarace objektů mohou být někdy užitečné. Nejsou však ideální ve velkých softwarových systémech, které interagují s mnoha dalšími částmi systému.

Doporučené čtení: Injekční závislost a návrhový vzor Singleton

Výrazy objektu Kotlin

Klíčové slovo object lze také použít k vytvoření objektů anonymní třídy známé jako anonymní objekty. Používají se, pokud potřebujete vytvořit objekt mírné úpravy nějaké třídy nebo rozhraní, aniž byste pro ni deklarovali podtřídu. Například ,

 window.addMouseListener (object: MouseAdapter () (override fun mouseClicked (e: MouseEvent) (//…) override fun mouseEntered (e: MouseEvent) (//…)))

(Příklad je převzat z oficiální stránky dokumentů Kotlin.)

Zde je deklarován anonymní objekt rozšiřující třídu MouseAdapter. Program přepíše dvě MouseAdaptermetody: mouseClicked()a mouseEntered().

V případě potřeby můžete anonymnímu objektu přiřadit název a uložit jej do proměnné. Například,

 val obj = object: MouseAdapter () (přepsat zábavné mouseClicked (e: MouseEvent) (//…) přepsat zábavné mouseEntered (e: MouseEvent) (//…))

Příklad: 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() ) 

Když spustíte program, výstup bude:

Jíst jídlo. Mluvit s lidmi. Nemodlím se. Jsem ateista.

Zde je anonymní objekt uložen v proměnné ateista, který implementuje třídu Person s pray()metodou je přepsána.

Pokud implementujete třídu, která má konstruktor pro deklaraci anonymního objektu, musíte předat příslušné parametry konstruktoru. Například,

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

Když spustíte program, výstup bude:

jméno: Jack, věk: 29 Jíst jídlo. Mluvit s lidmi. Nemodlím se. Jsem ateista.

Zajímavé články...