Декларації та вирази об’єктів Котліна

У цій статті ви дізнаєтеся про оголошення об’єктів (одиночні) та вирази об’єктів за допомогою прикладів.

Декларації об’єктів

Сінглтон - це об’єктно-орієнтований шаблон, де клас може мати лише один екземпляр (об’єкт).

Наприклад, ви працюєте з додатком, що має серверну базу даних 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 (object: MouseAdapter () (override fun mouseClicked (e: MouseEvent) (// …) override fun mouseEntered (e: MouseEvent) (// …)))

(Приклад взято з офіційної сторінки документів у Котліні.)

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

При необхідності ви можете призначити анонімному об’єкту ім’я та зберегти його у змінній. Наприклад,

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

Приклад: Вираз об’єкта Котліна

 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 за допомогою 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 Вживання їжі. Розмова з людьми. Я не молюсь. Я атеїст.

Цікаві статті...