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.