Creazione di equivalenti finali statici Java in Kotlin

1. Panoramica

In questo rapido tutorial, discuteremo delle variabili finali statiche in Java e del loro equivalente in Kotlin.

In Java, la dichiarazione delle variabili finali statiche ci aiuta a creare costanti . E in Kotlin abbiamo diversi modi per raggiungere lo stesso obiettivo.

2. All'interno di un oggetto

In primo luogo, diamo un'occhiata alla dichiarazione delle costanti in un oggetto Kotlin :

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

Nell'esempio precedente, usiamo const val per dichiarare una costante del tempo di compilazione e val per dichiarare una costante del tempo di esecuzione.

Li chiamiamo nel nostro codice Kotlin allo stesso modo delle variabili finali statiche Java :

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

Nota, tuttavia, che non possiamo usare TestKotlinConstantObject.RUN_TIME_CONST nel codice Java . La parola chiave val da sola, senza la parola chiave const , non espone i campi Kotlin come pubblici per la chiamata delle classi Java .

Questo è il motivo per cui abbiamo @JvmField per esporre le variabili val per creare variabili finali statiche compatibili con Java :

@JvmField val JAVA_STATIC_FINAL_FIELD = 20

Possiamo chiamarlo proprio come una variabile const val in entrambe le classi Kotlin e Java :

assertEquals(20, TestKotlinConstantObject.JAVA_STATIC_FINAL_FIELD)

Inoltre, abbiamo anche @JvmStatic, che possiamo usare in modo simile a @JvmField. Ma non lo stiamo usando qui poiché @JvmStatic rende statica la funzione di accesso alla proprietà in Java ma non la variabile stessa.

3. All'interno di una classe Kotlin

La dichiarazione di queste costanti è simile in una classe Kotlin , ma all'interno del suo oggetto compagno:

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

E possiamo fare lo stesso di prima:

assertEquals(40, TestKotlinConstantClass.COMPANION_OBJECT_NUMBER)

5. conclusione

In questo articolo, abbiamo esaminato l'uso di const , val e @JvmField in Kotlin per creare variabili finali statiche.

Come sempre, il codice può essere trovato su GitHub.