KotlinのJava static finalフィールドに相当するものは何ですか?


132

Javaでは、定数を宣言するには、次のようにします。

class Hello {
    public static final int MAX_LEN = 20;
}

Kotlinで同等のものは何ですか?


1
以来ヴァル Kotlinの暗示では、読み取り専用、それは十分ではないでしょうか?
IgorGanapolsky

回答:


213

Kotlinのドキュメントによると、これは同等です。

class Hello {
    companion object {
        const val MAX_LEN = 20
    }
}

使用法:

fun main(srgs: Array<String>) {
    println(Hello.MAX_LEN)
}

また、これは静的な最終プロパティです(ゲッター付きのフィールド)。

class Hello {
    companion object {
        @JvmStatic val MAX_LEN = 20
    }
}

そして最後に、これは静的な最終フィールドです。

class Hello {
    companion object {
        @JvmField val MAX_LEN = 20
    }
}

最初の例(constフィールドを使用)は、属性に使用できます。一般的なケース:すべてのWeb APIパスを単一のファイルで宣言し、次のコードでコントローラーから参照します: "@RequestMapping(path = arrayOf(WebPathConstants.MapApiPath))"(Spring Boot attribute)
Manushin Igor

こんにちは、みんな!この@JvmFieldがまだ必要かどうか知っていますか?私はこれをアンドロイドで使用していますが、代わりに「const」を使用できるという糸くずの警告が表示されます。私はそれをconstに変更し、それを使用しているJavaクラスに問題はありません。
Leandro Ocampo

1
@LeandroOcampo変更可能な静的フィールドがある場合は引き続き必要ですconst val-時定数をコンパイル@JvmField valし、場合によってはこれを置換として使用できることを確認してください。値が実行時に計算されるか、プリミティブ型または文字列でない場合、それは機能しません。参考:kotlinlang.org/docs/reference/...
ルスラン

36

に実装がある場合は、クラス内Helloで使用しますcompanion object

class Hello {
  companion object {
    val MAX_LEN = 1 + 1
  }

}

場合Hello、純粋なシングルトンオブジェクトであります

object Hello {
  val MAX_LEN = 1 + 1
}

プロパティがコンパイル時の定数の場合、constキーワードを追加します

object Hello {
  const val MAX_LEN = 20
}

Javaで使用する場合は、@JvmStaticアノテーションを追加します

object Hello {
  @JvmStatic val MAX_LEN = 20
}

1
ベストアンサー
rcorbellini '19年

9

私のために

object Hello {
   const val MAX_LEN = 20
}

多くの定型的なものでした。私はこのように静的なfinalフィールドをクラスの上に置くだけです

val MIN_LENGTH = 10

class MyService{
}

2
定数をファイルの外部に公開する必要がない場合(つまりprivate、javaの場合)、この定義が最も簡潔です。
javaxian 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.