Creëren van Java statische definitieve equivalenten in Kotlin

1. Overzicht

In deze korte tutorial bespreken we statische finale variabelen in Java en hun equivalent in Kotlin.

In Java, verklaren statische finale variabelen helpen ons constanten te creëren. En bij Kotlin hebben we verschillende manieren om hetzelfde doel te bereiken.

2. Binnen een voorwerp

Laten we eerst eens kijken naar het declareren van constanten in een Kotlin voorwerp:

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

In het bovenstaande voorbeeld we gebruiken const val om een ​​compilatietijdconstante te declareren, en val om een ​​runtime-constante te declareren.

We noemen ze in onze Kotlin-code op dezelfde manier als Java statische finale variabelen:

@Test plezier gegevenConstant_whenCompareWithActualValue_thenReturnTrue () {assertEquals (10, TestKotlinConstantObject.COMPILE_TIME_CONST) assertEquals (30, TestKotlinConstantObject.RUN_TIME_CONST)}

Merk echter op dat we TestKotlinConstantObject.RUN_TIME_CONST in Java-code. De val trefwoord op zichzelf, zonder const trefwoord, stelt Kotlin-velden niet bloot als openbaar voor Java-klassen om aan te roepen.

Dat is de reden waarom we hebben @JvmField blootstellen val variabelen om Java-vriendelijk te maken statische finale variabelen:

@JvmField val JAVA_STATIC_FINAL_FIELD = 20

We kunnen deze noemen net als een const val variabel in zowel Kotlin- als Java-klassen:

assertEquals (20, TestKotlinConstantObject.JAVA_STATIC_FINAL_FIELD)

Daarnaast hebben we ook @JvmStatic, die we op een vergelijkbare manier kunnen gebruiken @JvmField. Maar we gebruiken het hier sindsdien niet meer @JvmStatic maakt de eigenschap accessor statisch in Java, maar niet de variabele zelf.

3. Binnen in een Kotlin klasse

De verklaring van deze constanten is vergelijkbaar in een Kotlin klasse, maar binnen zijn begeleidend object:

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

En we kunnen hetzelfde doen als voorheen:

assertEquals (40, TestKotlinConstantClass.COMPANION_OBJECT_NUMBER)

5. Conclusie

In dit artikel hebben we het gebruik van const, val, en @JvmField in Kotlin om statische eindvariabelen te maken.

Zoals altijd is de code te vinden op GitHub.