Java statische endgültige Entsprechungen in Kotlin erstellen

Erstellen von statischen Java-Endäquivalenten in Kotlin

1. Überblick

In diesem kurzen Tutorial werden die Variablen vonstatic finalin Java und ihre Entsprechung in Kotlin erläutert.

In Javadeclaring static final variables helps us create constants. Und in Kotlin haben wir verschiedene Möglichkeiten, um dasselbe Ziel zu erreichen.

2. Innerhalb einesobject

Schauen wir uns zunächst die Deklaration von Konstanten in einem Kotlinobjectan:

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 istwe use const val to declare a compile-time constant, and val to declare a run-time constant.

Wir nennen sie in unserem Kotlin-Code genauso wie die Variablen von 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. Dieval keyword by itself, without const keyword, doesn’t expose Kotlin fields as public for Java classes to call.

Dies ist der Grund, warum wir@JvmField haben, umval Variablen verfügbar zu machen, um Java-freundlichestatic final Variablen zu erstellen:

@JvmField val JAVA_STATIC_FINAL_FIELD = 20

Wir können dieses einejust like a const val variable in both Kotlin and Java classes nennen:

assertEquals(20, TestKotlinConstantObject.JAVA_STATIC_FINAL_FIELD)

Darüber hinaus haben wir auch@JvmStatic, , die wir auf ähnliche Weise wie@JvmField. verwenden können. Wir verwenden sie hier jedoch nicht seit@JvmStatic makes the property accessor static in Java but not the variable itself.

3. Innerhalb eines Kotlinclass

Die Deklaration dieser Konstanten ist in einem Kotlinclass ähnlich, jedoch innerhalb seinescompanion object:

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. Fazit

In diesem Artikel haben wirconst,val und@JvmField in Kotlin verwendet, um statische endgültige Variablen zu erstellen.

Wie immer kann der Codeover on GitHub gefunden werden.