studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones kotlin

kotlin - reales - libro de android studio en español pdf



Métodos y variables estáticas de Kotlin (4)

Lo más cercano a los campos estáticos de Java es un objeto complementario. Puede encontrar la referencia de documentación para ellos aquí: https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects

Su código en Kotlin se vería así:

class Foo { companion object { lateinit var instance: Foo } init { instance = this } }

Si desea que sus campos / métodos se expongan como estáticos a los llamadores de Java, puede aplicar la anotación @JvmStatic :

class Foo { companion object { @JvmStatic lateinit var instance: Foo } init { instance = this } }

Quiero poder guardar una instancia de clase en una variable estática pública, pero no puedo entender cómo hacer esto en Kotlin.

class Foo { public static Foo instance; public Foo() { instance = this; } }


Parece que desea definir un objeto singleton. Se admite en Kotlin como un concepto de primera clase:

object Foo { ... }

Kotlin se encarga automáticamente de todo el código repetitivo con campo estático y constructor. No tienes que escribir nada de eso.

Desde el código de Kotlin puede referirse a la instancia de este objeto simplemente como Foo . Desde el código Java, puede hacer Foo.INSTANCE a la instancia de este objeto como Foo.INSTANCE , porque el compilador de Kotlin crea automáticamente el campo estático correspondiente llamado INSTANCE .


Puede crear un objeto complementario para la clase, y si realmente desea que el campo sea estático, puede usar la anotación @JvmStatic. El objeto complementario tiene acceso a los miembros privados de la clase para la que es compañero.

Vea a continuación un ejemplo:

class User { private lateinit var name: String override fun toString() = name companion object { @JvmStatic val instance by lazy { User().apply { name = "jtonic" } } } } class CompanionTest { @Test fun `test companion object`() { User.instance.toString() shouldBe "jtonic" } }


primero crea una clase simple y luego crea un bloque seguido de una palabra clave de objeto complementario

por ejemplo:

class Test{ companion object{ fun getValue(): String{ return "Test String" } } }

puedes llamar a esta función de clase usando el nombre de clase nombre de función de punto

por ejemplo:

// here you will get the function value Test.getValue()