Создание статических Java-эквивалентов в Котлине

Создание статических Java-эквивалентов в Котлине

1. обзор

В этом кратком руководстве мы обсудим переменныеstatic final в Java и их эквивалент в Kotlin.

В Javadeclaring static final variables helps us create constants. А в Котлине у нас есть несколько способов достичь одной и той же цели.

2. Внутриobject

Во-первых, давайте посмотрим на объявление констант в Kotlinobject:

object TestKotlinConstantObject {
    const val COMPILE_TIME_CONST = 10

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

В приведенном выше примереwe use const val to declare a compile-time constant, and val to declare a run-time constant.

Мы вызываем их в нашем коде Kotlin так же, как переменные 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. val keyword by itself, without const keyword, doesn’t expose Kotlin fields as public for Java classes to call.

По этой причине у нас есть@JvmField для предоставления переменныхval для создания дружественных к Java переменныхstatic final:

@JvmField val JAVA_STATIC_FINAL_FIELD = 20

Мы можем назвать этоjust like a const val variable in both Kotlin and Java classes:

assertEquals(20, TestKotlinConstantObject.JAVA_STATIC_FINAL_FIELD)

Кроме того, у нас также есть@JvmStatic, w, который мы можем использовать аналогично@JvmField.. Но мы не используем его здесь, поскольку@JvmStatic makes the property accessor static in Java but not the variable itself.

3. Внутри Котлинаclass

Объявление этих констант аналогично Kotlinclass, но внутри егоcompanion object:

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

И мы можем сделать то же, что и раньше:

assertEquals(40, TestKotlinConstantClass.COMPANION_OBJECT_NUMBER)

5. Заключение

В этой статье мы рассмотрели использованиеconst,val и@JvmField в Kotlin для создания статических конечных переменных.

Как всегда, код можно найтиover on GitHub.