Declarații și expresii ale obiectului Kotlin

În acest articol, veți afla despre declarațiile de obiecte (singletoni) și expresiile de obiect cu ajutorul exemplelor.

Declarații de obiecte

Singleton este un model orientat obiect, unde o clasă poate avea o singură instanță (obiect).

De exemplu, lucrați la o aplicație cu backend de bază de date SQL. Doriți să creați un pool de conexiuni pentru a accesa baza de date în timp ce reutilizați aceeași conexiune pentru toți clienții. Pentru aceasta, puteți crea conexiunea prin clasa singleton, astfel încât fiecare client să obțină aceeași conexiune.

Kotlin oferă o modalitate ușoară de a crea singuri folosind caracteristica de declarare a obiectelor. Pentru aceasta, se folosește cuvântul cheie obiect.

 obiect SingletonExample (… // corpul clasei …)

Codul de mai sus combină o declarație de clasă și o declarație a unei singure instanțe SingletonExample a clasei.

O declarație de obiect poate conține proprietăți, metode și așa mai departe. Cu toate acestea, nu li se permite să aibă constructori (ceea ce are sens). De ce?

Similar obiectelor dintr-o clasă normală, puteți apela metode și accesa proprietăți utilizând .notația.

Exemplu: Declarație de obiect

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

Când rulați programul, ieșirea va fi:

 b = 1 rezultat = 12

Declarația obiectului poate moșteni din clase și interfețe într-un mod similar ca și clasele normale.

Singletoni și injecție de dependență

Declarațiile de obiecte pot fi uneori utile. Cu toate acestea, acestea nu sunt ideale în sistemele software mari care interacționează cu multe alte părți ale sistemului.

Lectură recomandată: injecție de dependență și model Singleton Design

Expresii obiect Kotlin

Cuvântul cheie obiect poate fi, de asemenea, utilizat pentru a crea obiecte dintr-o clasă anonimă cunoscută sub numele de obiecte anonime. Acestea sunt utilizate dacă trebuie să creați un obiect cu o ușoară modificare a unei clase sau a unei interfețe fără a declara o subclasă pentru aceasta. De exemplu ,

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

(Exemplul este preluat din pagina oficială a documentelor Kotlin.)

Aici, este declarat un obiect anonim care extinde clasa MouseAdapter. Programul suprascrie două MouseAdaptermetode: mouseClicked()și mouseEntered().

Dacă este necesar, puteți atribui un nume obiectului anonim și îl puteți stoca într-o variabilă. De exemplu,

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

Exemplu: Expresia obiectului 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() ) 

Când rulați programul, ieșirea va fi:

Mananc. Vorbind cu oamenii. Nu mă rog. Sunt ateu.

Aici, obiectul anonim este stocat într-o variabilă ateu care implementează clasa Persoană cu pray()metoda este suprascrisă.

Dacă implementați o clasă care are un constructor pentru a declara un obiect anonim, trebuie să treceți parametrii de constructor corespunzători. De exemplu,

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

Când rulați programul, ieșirea va fi:

nume: Jack, vârstă: 29 Mâncare. Vorbind cu oamenii. Nu mă rog. Sunt ateu.

Articole interesante...