Création d'équivalents finaux statiques Java dans Kotlin

1. Vue d'ensemble

Dans ce tutoriel rapide, nous discuterons des variables finales statiques en Java et de leur équivalent dans Kotlin.

En Java, la déclaration de variables finales statiques nous aide à créer des constantes . Et à Kotlin, nous avons plusieurs façons d'atteindre le même objectif.

2. À l'intérieur d'un objet

Tout d'abord, jetons un œil à la déclaration de constantes dans un objet Kotlin :

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

Dans l'exemple ci-dessus, nous utilisons const val pour déclarer une constante à la compilation et val pour déclarer une constante à l'exécution.

Nous les appelons dans notre code Kotlin de la même manière que les variables finales statiques Java :

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

Notez cependant que nous ne pouvons pas utiliser TestKotlinConstantObject.RUN_TIME_CONST dans le code Java . Le mot-clé val en lui-même, sans mot-clé const , n'expose pas les champs Kotlin comme publics pour les classes Java à appeler .

C'est la raison pour laquelle nous avons @JvmField pour exposer les variables val afin de créer des variables finales statiques compatibles Java :

@JvmField val JAVA_STATIC_FINAL_FIELD = 20

Nous pouvons appeler celle-ci comme une variable const val dans les classes Kotlin et Java :

assertEquals(20, TestKotlinConstantObject.JAVA_STATIC_FINAL_FIELD)

De plus, nous avons également @JvmStatic, que nous pouvons utiliser de la même manière que @JvmField. Mais nous ne l'utilisons pas ici car @JvmStatic rend l'accesseur de propriété statique en Java mais pas la variable elle-même.

3. À l'intérieur d'une classe Kotlin

La déclaration de ces constantes est similaire dans une classe Kotlin , mais à l'intérieur de son objet compagnon:

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

Et nous pouvons faire la même chose qu'avant:

assertEquals(40, TestKotlinConstantClass.COMPANION_OBJECT_NUMBER)

5. Conclusion

Dans cet article, nous avons décrit l'utilisation de const , val et @JvmField dans Kotlin pour créer des variables finales statiques.

Comme toujours, le code peut être trouvé sur GitHub.