Deklaracje i wyrażenia obiektów Kotlin

W tym artykule dowiesz się o deklaracjach obiektów (singletonach) i wyrażeniach obiektowych na przykładach.

Deklaracje obiektów

Singleton to wzorzec zorientowany obiektowo, w którym klasa może mieć tylko jedną instancję (obiekt).

Na przykład pracujesz z aplikacją z zapleczem bazy danych SQL. Chcesz utworzyć pulę połączeń, aby uzyskać dostęp do bazy danych, używając tego samego połączenia dla wszystkich klientów. W tym celu możesz utworzyć połączenie za pośrednictwem klasy pojedynczej, aby każdy klient uzyskał to samo połączenie.

Kotlin zapewnia łatwy sposób tworzenia singletonów przy użyciu funkcji deklaracji obiektów. W tym celu używane jest słowo kluczowe object.

 obiekt SingletonExample (… // treść klasy…)

Powyższy kod łączy w sobie deklarację klasy oraz deklarację pojedynczej instancji klasy SingletonExample.

Deklaracja obiektu może zawierać właściwości, metody i tak dalej. Jednak nie mogą mieć konstruktorów (co ma sens). Czemu?

Podobnie jak w przypadku obiektów zwykłej klasy, można wywoływać metody i uzyskiwać dostęp do właściwości przy użyciu .notacji.

Przykład: deklaracja obiektu

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

Po uruchomieniu programu wynik będzie następujący:

 b = 1 wynik = 12

Deklaracja obiektu może dziedziczyć z klas i interfejsów w podobny sposób jak zwykłe klasy.

Singletons i Dependency Injection

Deklaracje obiektów mogą być czasami przydatne. Jednak nie są one idealne w dużych systemach oprogramowania, które współdziałają z wieloma innymi częściami systemu.

Zalecana literatura: Wzorzec Dependency Injection i Singleton Design

Wyrażenia obiektów Kotlin

Słowo kluczowe object może również służyć do tworzenia obiektów klasy anonimowej zwanej obiektami anonimowymi. Są używane, jeśli potrzebujesz stworzyć obiekt o niewielkiej modyfikacji jakiejś klasy lub interfejsu bez deklarowania dla niego podklasy. Na przykład ,

 window.addMouseListener (object: MouseAdapter () (przesłonięcie fun mouseClicked (e: MouseEvent) (//…) przesłanianie zabawy mouseEntered (e: MouseEvent) (//…)))

(Przykład pochodzi z oficjalnej strony dokumentacji Kotlin.)

W tym miejscu zadeklarowano anonimowy obiekt rozszerzający klasę MouseAdapter. Program przesłania dwie MouseAdaptermetody: mouseClicked()i mouseEntered().

W razie potrzeby możesz przypisać nazwę do anonimowego obiektu i zapisać ją w zmiennej. Na przykład,

 val obj = object: MouseAdapter () (override fun mouseClicked (e: MouseEvent) (//…) override fun mouseEntered (e: MouseEvent) (//…))

Przykład: wyrażenie obiektu Kotlin

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

Po uruchomieniu programu wynik będzie następujący:

Jedzenie. Rozmowa z ludźmi. Nie modlę się. Jestem ateistą.

Tutaj anonimowy obiekt jest przechowywany w zmiennej atheist, która implementuje klasę Person z pray()metodą jest nadpisywana.

Jeśli implementujesz klasę, która ma konstruktora do deklarowania anonimowego obiektu, musisz przekazać odpowiednie parametry konstruktora. Na przykład,

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

Po uruchomieniu programu wynik będzie następujący:

imię: Jack, wiek: 29 lat Jedzenie. Rozmowa z ludźmi. Nie modlę się. Jestem ateistą.

Interesujące artykuły...