2016-11-01 3 views

答えて

71

これは同等ですKotlin documentationよる:

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 
    } 
} 

そして最後に、これはありますstatic finalフィールド:

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

最初の例(constフィールド付き)を属性に使用できます。一般的なケース:単一のファイル内のすべてのWeb APIパスを宣言し、そのようなコードを持つコントローラから参照してください: "@RequestMapping(path = arrayOf(WebPathConstants.MapApiPath))"(Spring起動属性) –

+0

こんにちは!この@JvmFieldがまだ必要かどうか知っていますか?私はアンドロイドでこれを使用しており、代わりに "const"を使用できるという警告を表示します。私はconstに変更し、それを使用しているJavaクラスは何の問題もありません。 –

+1

@LeandroOcampo静的フィールドの変更が可能で、 'const val' - コンパイル時定数があり、' @JvmField val'の代わりに使うことができる場合には、まだ必要です。実行時に値が計算された場合、またはプリミティブ型や文字列でない場合は、これを使用して機能しません。参照:http://kotlinlang.org/docs/reference/properties.html#compile-time-constants – IRus

6

あなたはHelloで実装している場合、プロパティが追加、コンパイル時定数である場合Helloは純粋なシングルトンオブジェクト

object Hello { 
    val MAX_LEN = 1 + 1 
} 

であれば、クラス内

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

} 

companion objectを使用a constキーワード

object Hello { 
    const val MAX_LEN = 20 
} 

あなたはJavaでそれを使用したい場合は、私

object Hello { 
    const val MAX_LEN = 20 
} 

について@JvmStatic注釈

object Hello { 
    @JvmStatic val MAX_LEN = 20 
} 
0

を追加するには、多くの決まり文句にしました。私は単純にこのようなクラスの上に静的最終フィールドを配置します

val MIN_LENGTH = 10 

class MyService{ 
} 
関連する問題