Criando equivalentes finais estáticos de Java no Kotlin

Criando equivalentes finais estáticos de Java no Kotlin

1. Visão geral

Neste tutorial rápido, discutiremos as variáveisstatic final em Java e seus equivalentes em Kotlin.

Em Java,declaring static final variables helps us create constants. E em Kotlin, temos várias maneiras de alcançar o mesmo objetivo.

2. Dentro de umobject

Em primeiro lugar, vamos dar uma olhada na declaração de constantes em um Kotlinobject:

object TestKotlinConstantObject {
    const val COMPILE_TIME_CONST = 10

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

No exemplo acima,we use const val to declare a compile-time constant, and val to declare a run-time constant.

Nós os chamamos em nosso código Kotlin da mesma maneira que as variáveis ​​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. Oval keyword by itself, without const keyword, doesn’t expose Kotlin fields as public for Java classes to call.

Essa é a razão pela qual temos@JvmField para expor as variáveisval para criar variáveisstatic final amigáveis ​​ao Java:

@JvmField val JAVA_STATIC_FINAL_FIELD = 20

Podemos chamar isso dejust like a const val variable in both Kotlin and Java classes:

assertEquals(20, TestKotlinConstantObject.JAVA_STATIC_FINAL_FIELD)

Além disso, também temos@JvmStatic, que podemos usar de maneira semelhante a@JvmField. Mas não estamos usando aqui desde@JvmStatic makes the property accessor static in Java but not the variable itself.

3. Dentro de um Kotlinclass

A declaração dessas constantes são semelhantes em um Kotlinclass, mas dentro de seucompanion object:

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

E podemos fazer o mesmo de antes:

assertEquals(40, TestKotlinConstantClass.COMPANION_OBJECT_NUMBER)

5. Conclusão

Neste artigo, examinamos o uso deconst,val e@JvmField em Kotlin para criar variáveis ​​finais estáticas.

Como sempre, o código pode ser encontradoover on GitHub.