Erstellen von statischen Java-Endäquivalenten in Kotlin

1. Übersicht

In diesem kurzen Tutorial werden wir statische Endvariablen in Java und deren Entsprechung in Kotlin diskutieren .

In Java hilft uns das Deklarieren statischer Endvariablen beim Erstellen von Konstanten . Und in Kotlin haben wir verschiedene Möglichkeiten, um dasselbe Ziel zu erreichen.

2. Innerhalb eines Objekts

Schauen wir uns zunächst die Deklaration von Konstanten in einem Kotlin- Objekt an :

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

Im obigen Beispiel verwenden wir const val , um eine Kompilierungszeitkonstante zu deklarieren, und val , um eine Laufzeitkonstante zu deklarieren.

Wir nennen sie in unserem Kotlin-Code genauso wie statische Java- Endvariablen :

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

Beachten Sie jedoch, dass wir TestKotlinConstantObject.RUN_TIME_CONST nicht in Java-Code verwenden können . Das Schlüsselwort val selbst ohne das Schlüsselwort const macht Kotlin-Felder nicht als öffentlich für Java-Klassen verfügbar .

Aus diesem Grund haben wir @JvmField , um val- Variablen verfügbar zu machen und Java-freundliche statische endgültige Variablen zu erstellen :

@JvmField val JAVA_STATIC_FINAL_FIELD = 20

Wir können diese Variable wie eine const val- Variable sowohl in Kotlin- als auch in Java-Klassen aufrufen :

assertEquals(20, TestKotlinConstantObject.JAVA_STATIC_FINAL_FIELD)

Darüber hinaus haben wir auch @JvmStatic, das wir auf ähnliche Weise wie @JvmField verwenden können. Wir verwenden es hier jedoch nicht, da @JvmStatic den Eigenschaftszugriff in Java statisch macht , nicht jedoch die Variable selbst.

3. In einer Kotlin- Klasse

Die Deklaration dieser Konstanten ist in einer Kotlin- Klasse ähnlich , jedoch innerhalb ihres Begleitobjekts:

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

Und wir können das Gleiche tun wie zuvor:

assertEquals(40, TestKotlinConstantClass.COMPANION_OBJECT_NUMBER)

5. Schlussfolgerung

In diesem Artikel haben wir die Verwendung von const , val und @JvmField in Kotlin durchlaufen , um statische endgültige Variablen zu erstellen.

Wie immer ist der Code auf GitHub zu finden.