Declarações e expressões de objetos Kotlin

Neste artigo, você aprenderá sobre declarações de objetos (singletons) e expressões de objetos com a ajuda de exemplos.

Declarações de objeto

Singleton é um padrão orientado a objetos em que uma classe pode ter apenas uma instância (objeto).

Por exemplo, você está trabalhando em um aplicativo com back-end de banco de dados SQL. Você deseja criar um pool de conexão para acessar o banco de dados enquanto reutiliza a mesma conexão para todos os clientes. Para isso, pode-se criar a conexão através da classe singleton para que todos os clientes obtenham a mesma conexão.

O Kotlin oferece uma maneira fácil de criar singletons usando o recurso de declaração de objeto. Para isso, utiliza-se a palavra-chave object.

 objeto SingletonExample (… // corpo da classe…)

O código acima combina uma declaração de classe e uma declaração de uma única instância SingletonExample da classe.

Uma declaração de objeto pode conter propriedades, métodos e assim por diante. No entanto, eles não podem ter construtores (o que faz sentido). Por quê?

Semelhante aos objetos de uma classe normal, você pode chamar métodos e acessar propriedades usando a .notação.

Exemplo: Declaração de Objeto

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

Quando você executa o programa, a saída será:

 b = 1 resultado = 12

A declaração do objeto pode ser herdada de classes e interfaces de maneira semelhante às classes normais.

Singletons e injeção de dependência

Declarações de objetos podem ser úteis às vezes. No entanto, eles não são ideais em grandes sistemas de software que interagem com muitas outras partes do sistema.

Leitura recomendada: Injeção de dependência e padrão de design singleton

Expressões de objeto Kotlin

A palavra-chave object também pode ser usada para criar objetos de uma classe anônima conhecida como objetos anônimos. Eles são usados ​​se você precisar criar um objeto de uma pequena modificação de alguma classe ou interface sem declarar uma subclasse para ela. Por exemplo ,

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

(O exemplo foi retirado da página oficial de documentos do Kotlin.)

Aqui, um objeto anônimo é declarado estendendo a classe MouseAdapter. O programa substitui dois MouseAdaptermétodos: mouseClicked()e mouseEntered().

Se necessário, você pode atribuir um nome ao objeto anônimo e armazená-lo em uma variável. Por exemplo,

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

Exemplo: expressão de objeto 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() ) 

Quando você executa o programa, a saída será:

Comer comida. Conversando com pessoas. Eu não oro. Eu sou ateu

Aqui, o objeto anônimo é armazenado na variável atheist que implementa a classe Person com o pray()método sobrescrito.

Se você estiver implementando uma classe que possui um construtor para declarar um objeto anônimo, você precisa passar os parâmetros apropriados do construtor. Por exemplo,

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

Quando você executa o programa, a saída será:

nome: Jack, idade: 29 Comer. Conversando com pessoas. Eu não oro. Eu sou ateu

Artigos interessantes...