1. 概要

このクイックチュートリアルでは、Javaの static final 変数と、Kotlinの同等の変数について説明します。

Javaでは、静的最終変数を宣言すると、定数を作成するのに役立ちます。 Kotlinでは、同じ目標を達成するためのいくつかの方法があります。

2. オブジェクトの内部

まず、Kotlinオブジェクトで定数を宣言する方法を見てみましょう。

object TestKotlinConstantObject {
    const val COMPILE_TIME_CONST = 10

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

上記の例では、 const valを使用してコンパイル時定数を宣言し、valを使用して実行時定数を宣言します。

Kotlinコードでは、Java staticfinal変数と同じ方法でそれらを呼び出します。

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

ただし、JavaコードではTestKotlinConstantObject.RUN_TIME_CONSTを使用できないことに注意してください。 valキーワード自体は、constキーワードなしで、Javaクラスがを呼び出すためのパブリックとしてKotlinフィールドを公開しません。

これが、@JvmFieldval変数を公開して、Java対応の staticfinal変数を作成する理由です。

@JvmField val JAVA_STATIC_FINAL_FIELD = 20

これは、KotlinクラスとJavaクラスの両方のconstval変数と同じようにと呼ぶことができます。

assertEquals(20, TestKotlinConstantObject.JAVA_STATIC_FINAL_FIELD)

また、 @ JvmStatic、 これは、次のように使用できます。 @JvmField。 ただし、ここでは使用していません。 @JvmStaticは、Javaでプロパティアクセサーを静的にしますが、変数自体は静的にしません。

3. Kotlinクラスの内部

これらの定数の宣言は、Kotlin クラスでも同様ですが、コンパニオンオブジェクト内にあります:

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

そして、以前と同じことができます。

assertEquals(40, TestKotlinConstantClass.COMPANION_OBJECT_NUMBER)

5. 結論

この記事では、Kotlinで const val 、および @JvmField を使用して、静的な最終変数を作成しました。

いつものように、コードはGitHubにあります。