Декларации и изрази на обекти на Kotlin

В тази статия ще научите за обектни декларации (единични) и обектни изрази с помощта на примери.

Обектни декларации

Сингълтънът е обектно-ориентиран модел, при който клас може да има само един екземпляр (обект).

Например работите в приложение, което има бекенд на базата данни на SQL. Искате да създадете пул от връзки за достъп до базата данни, като същевременно използвате една и съща връзка за всички клиенти. За това можете да създадете връзката чрез единичен клас, така че всеки клиент да получи една и съща връзка.

Kotlin предоставя лесен начин за създаване на единични тонове с помощта на функцията за деклариране на обекти. За това се използва ключова дума object.

 обект SingletonExample (… // тяло на класа …)

Горният код комбинира декларация на клас и декларация на единичен екземпляр SingletonExample на класа.

Декларацията за обект може да съдържа свойства, методи и т.н. Те обаче нямат право да имат конструктори (което има смисъл). Защо?

Подобно на обекти от нормален клас, можете да извиквате методи и да осъществявате достъп до свойства, като използвате .нотацията.

Пример: Обектна декларация

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

Когато стартирате програмата, изходът ще бъде:

 b = 1 резултат = 12

Обектната декларация може да наследява от класове и интерфейси по подобен начин като нормалните класове.

Единични инжекции и инжектиране на зависимост

Обектните декларации могат да бъдат полезни понякога. Те обаче не са идеални в големи софтуерни системи, които си взаимодействат с много други части на системата.

Препоръчително четене: Инжектиране на зависимост и модел на единичен дизайн

Котлин обект Изрази

Ключовата дума object може да се използва и за създаване на обекти от анонимен клас, известен като анонимни обекти. Те се използват, ако трябва да създадете обект с лека модификация на някакъв клас или интерфейс, без да декларирате подклас за него. Например ,

 window.addMouseListener (обект: MouseAdapter () (замяна на забавна мишкаClicked (e: MouseEvent) (// …) замяна на забавна mouseEntered (e: MouseEvent) (// …)))

(Примерът е взет от официалната страница с документи на Kotlin.)

Тук анонимен обект се обявява за разширяване на класа MouseAdapter. Програмата заменя два MouseAdapterметода: mouseClicked()и mouseEntered().

Ако е необходимо, можете да присвоите име на анонимния обект и да го съхраните в променлива. Например,

 val obj = обект: MouseAdapter () (замяна на забавно mouseClicked (e: MouseEvent) (// …) замяна на забавно mouseEntered (e: MouseEvent) (// …))

Пример: израз на обект 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() ) 

Когато стартирате програмата, изходът ще бъде:

Ядене на храна. Разговор с хора. Аз не се моля Аз съм атеист.

Тук анонимният обект се съхранява в променлива атеист, която реализира Person class с pray()метод е заменен.

Ако внедрявате клас, който има конструктор за деклариране на анонимен обект, трябва да предадете подходящи параметри на конструктора. Например,

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

Когато стартирате програмата, изходът ще бъде:

име: Джак, възраст: 29 Хранене с храна. Разговор с хора. Аз не се моля Аз съм атеист.

Интересни статии...