Объявления и выражения объектов 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

Объявление объекта может наследоваться от классов и интерфейсов аналогично обычным классам.

Синглтоны и внедрение зависимостей

Иногда могут быть полезны объявления объектов. Однако они не идеальны для больших программных систем, которые взаимодействуют со многими другими частями системы.

Рекомендуемая литература: внедрение зависимостей и шаблон проектирования синглтонов

Выражения объекта Kotlin

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

 window.addMouseListener (object: MouseAdapter () (переопределить fun mouseClicked (e: MouseEvent) (//…) переопределить fun mouseEntered (e: MouseEvent) (//…)))

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

Здесь объявлен анонимный объект, расширяющий класс MouseAdapter. Программа переопределяет два MouseAdapterметода: mouseClicked()и mouseEntered().

При необходимости вы можете присвоить анонимному объекту имя и сохранить его в переменной. Например,

 val obj = object: MouseAdapter () (переопределить fun mouseClicked (e: MouseEvent) (//…) переопределить fun 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() ) 

Когда вы запустите программу, вывод будет:

Поедание пищи. Общаюсь с людьми. Я не молюсь. Я атеист.

Здесь анонимный объект хранится в переменной atheist, которая реализует класс 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 Ест. Общаюсь с людьми. Я не молюсь. Я атеист.

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