Kotlinでのstaticの取り扱いについてです。
Kotlinでは、static修飾子が定義されていないので、Javaのように書くことができません。
Kotlinでfinal static的な定数的な書き方をする場合は、以下のように書きます。
1 2 3 4 5 6 7 8 9 10 11 12 |
fun main(args: Array<String>) { print(constObj.MAX_VALUE) } class constObj { // companionで修飾することで、Values.を省略できる companion object Values { // anotation JvmFieldよりgetter setterを生成しない @JvmField val MAX_VALUE = 100 } } |
いくつかキーワードが出てきたので、抜粋します。
companion
companionを使用することで、objectのwrapper定義を省略することができています。
companionを定義しないと、
constObj.Values.MAX_VALUE
としないといけませんが、companionを使うことにより、省略ができます。
@JvmField
@JvmFieldをつけることにより、compilerにより自動でsetterとgetterが作成されないようです。
Performanceのためつけたほうがいいですね。
続いて、Static変数です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fun main(args: Array<String>) { // 0 println(constObj.staticNum) constObj.staticNum = 100 // 100 println(constObj.staticNum) } class constObj { // companionで修飾することで、Values.を省略できる companion object Values { @JvmField var staticNum = 0 } } |
valをvarに変えただけです。
instance化しなくても参照と値を変更することができます。
参考url
- https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-jvm-field/
- https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#static-fields
code
more code
~~~~