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

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

1. Vue d'ensemble

Dans ce rapide didacticiel, nous aborderons les variablesstatic final en Java et leurs équivalents en Kotlin.

En Java,declaring static final variables helps us create constants. Et à Kotlin, nous disposons de plusieurs moyens pour atteindre le même objectif.

2. À l'intérieur d'unobject

Tout d'abord, examinons la déclaration de constantes dans un Kotlinobject:

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,we use const val to declare a compile-time constant, and val to declare a run-time constant.

Nous les appelons dans notre code Kotlin de la même manière que les variables Javastatic final:

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

Note, though, that we cannot use TestKotlinConstantObject.RUN_TIME_CONST in Java code. Lesval keyword by itself, without const keyword, doesn’t expose Kotlin fields as public for Java classes to call.

C’est la raison pour laquelle nous avons@JvmField pour exposer les variablesval afin de créer des variablesstatic final compatibles Java:

@JvmField val JAVA_STATIC_FINAL_FIELD = 20

Nous pouvons appeler celui-cijust like a const val variable in both Kotlin and Java classes:

assertEquals(20, TestKotlinConstantObject.JAVA_STATIC_FINAL_FIELD)

De plus, nous avons aussi@JvmStatic, w que nous pouvons utiliser de la même manière que@JvmField. Mais nous ne l'utilisons pas ici depuis@JvmStatic makes the property accessor static in Java but not the variable itself.

3. À l'intérieur d'un Kotlinclass

La déclaration de ces constantes est similaire dans un Kotlinclass, mais à l'intérieur de sescompanion object:

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 passé en revue l'utilisation deconst,val et@JvmField dans Kotlin pour créer des variables finales statiques.

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