Creación de equivalentes finales estáticos de Java en Kotlin

1. Información general

En este tutorial rápido, discutiremos las variables estáticas finales en Java y su equivalente en Kotlin.

En Java, declarar variables finales estáticas nos ayuda a crear constantes . Y en Kotlin, tenemos varias formas de lograr el mismo objetivo.

2. Dentro de un objeto

En primer lugar, echemos un vistazo a la declaración de constantes en un objeto Kotlin :

object TestKotlinConstantObject { const val COMPILE_TIME_CONST = 10 val RUN_TIME_CONST: Int init { RUN_TIME_CONST = TestKotlinConstantObject.COMPILE_TIME_CONST + 20; } }

En el ejemplo anterior, usamos const val para declarar una constante en tiempo de compilación y val para declarar una constante en tiempo de ejecución.

Los llamamos en nuestro código Kotlin de la misma manera que las variables finales estáticas de Java :

@Test fun givenConstant_whenCompareWithActualValue_thenReturnTrue() { assertEquals(10, TestKotlinConstantObject.COMPILE_TIME_CONST) assertEquals(30, TestKotlinConstantObject.RUN_TIME_CONST) }

Sin embargo, tenga en cuenta que no podemos usar TestKotlinConstantObject.RUN_TIME_CONST en código Java . La palabra clave val por sí misma, sin la palabra clave const , no expone los campos de Kotlin como públicos para que los llamen las clases de Java .

Esa es la razón por la que tenemos @JvmField para exponer las variables val para crear variables finales estáticas compatibles con Java :

@JvmField val JAVA_STATIC_FINAL_FIELD = 20

Podemos llamar a este como una variable const val en las clases de Kotlin y Java :

assertEquals(20, TestKotlinConstantObject.JAVA_STATIC_FINAL_FIELD)

Además, también tenemos @JvmStatic, que podemos usar de manera similar a @JvmField. Pero no lo estamos usando aquí ya que @JvmStatic hace que el descriptor de acceso a la propiedad sea estático en Java, pero no la variable en sí.

3. Dentro de una clase de Kotlin

La declaración de estas constantes es similar en una clase Kotlin , pero dentro de su objeto complementario:

class TestKotlinConstantClass { companion object { const val COMPANION_OBJECT_NUMBER = 40 } }

Y podemos hacer lo mismo que antes:

assertEquals(40, TestKotlinConstantClass.COMPANION_OBJECT_NUMBER)

5. Conclusión

En este artículo, analizamos el uso de const , val y @JvmField en Kotlin para crear variables finales estáticas.

Como siempre, el código se puede encontrar en GitHub.