English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Declaración y expresión de objeto de Kotlin

En este artículo, aprenderá sobre la declaración de objeto (singleton) y la expresión de objeto con la ayuda de ejemplos.

Declaración de objeto

Un singleton es un patrón orientado a objetos en el que una clase puede tener solo una instancia (objeto).
Por ejemplo, si está desarrollando una aplicación con un backend de base de datos SQL, desea crear un pool de conexiones para acceder a la base de datos y reused la misma conexión para todos los clientes. Para esto, puede crear conexiones a través de una clase singleton para que cada cliente obtenga la misma conexión.

Kotlin proporciona un método simple para crear singletones utilizando la característica de declaración de objeto. Para esto, se utiliza la palabra clave object.

object SingletonExample {
    ... .. ...
    //Cuerpo de la clase
    ... .. ...
}

El código anterior combina una declaración de clase y la declaración de una única instancia de la clase SingletonExample.

La declaración de objeto puede contener propiedades, métodos, etc., pero no permite constructores (lo que tiene sentido).

Los objetos de clases comunes pueden ser llamados métodos y acceder a propiedades usando el símbolo .

Ejemplo: Declaración de objetos

object Test {
    private var a: Int = 0
    var b: Int = 1
    fun makeMe12(): Int {
        a = 12
        return a
    }
}
fun main(args: Array<String>) {
    val result: Int
    result = Test.makeMe12()
    println("b = ${Test.b}")
    println("result = $result")
}

Al ejecutar el programa, la salida será:

b = 1
result = 12

Las declaraciones de objetos pueden heredar de clases e interfaces como clases normales.

Singleton y dependencia inyectada

Las declaraciones de objetos a veces son muy útiles. Sin embargo, no son ideales en sistemas de software grandes donde interactúan muchas partes del sistema.

Expresiones de objetos Kotlin

La palabra clave object también se puede usar para crear objetos de clases anónimas, conocidos como objetos anónimos. Si es necesario crear un objeto que modifique ligeramente una clase o interfaz sin declarar una subclase, se pueden usar. Por ejemplo,

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

Aquí, se declara un objeto anónimo que extiende la clase MouseAdapter. El programa sobrescribe dos métodos de MouseAdapter: mouseClicked() y mouseEntered().

Si es necesario, se puede asignar un nombre a un objeto anónimo y guardarlo en una variable. Por ejemplo:

val obj = object : MouseAdapter() {
    override fun mouseClicked(e: MouseEvent) {
        // ...
    }
    override fun mouseEntered(e: MouseEvent) {
        // ...
    }
}

Ejemplo: Expresiones de objetos Kotlin

open class Person() {
    fun eat() = println("comer.")
    fun talk() = println("hablar con personas.")
    open fun pray() = println("Rezaré a Dios.")}}
}
fun main(args: Array<String>) {
    val atheist = object : Person() {
        override fun pray() = println("Rezo a Dios.")
    }
    atheist.eat()
    atheist.talk()
    atheist.pray()
}

Al ejecutar el programa, la salida será:

Comer.
Hable con las personas.
No rezo. Soy ateo.

Aquí, el objeto anónimo se almacena en la variable atheist, que implementa la clase Person, y el método pray() se sobrescribe.

Si la clase que implementa tiene un constructor que declara un objeto anónimo,则需要传递适当的构造函数参数。例如,

open class Person(name: String, age: Int) {
    init {
        println("name: $name, age: $age")
    }
    fun eat() = println("comer.")
    fun talk() = println("hablar con personas.")
    open fun pray() = println("Rezaré a Dios.")}}
}
fun main(args: Array<String>) {
    val atheist = object : Person("Jack", 29) {
        override fun pray() = println("Rezo a Dios.")
    }
    atheist.eat()
    atheist.talk()
    atheist.pray()
}

Al ejecutar el programa, la salida será:

name: Jack, age: 29
Comer.
Hable con las personas.
No rezo. Soy ateo.