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