092: Learning Kotlin – dealing with static-ness and (companion) objects costs – Fragmented
「companion object」だな. と思いながらとりあえず書く.
class Foo {
companion object {
val myVar = "testing"
}
}
これを Kotlin から呼ぶ場合は,
Foo.myVar
ですが, Java から呼ぶ場合は,
Foo.Companion.getMyVar();
となり クソですね.
では, Jvm アノテーション を使います.
class Foo {
companion object {
@JvmField val myVar = "testing"
}
}
この場合は Kotlin/Java それぞれ同じように呼べます.
// calling from Kotlin
Foo.myVar
// calling from Java
Foo.myVar;
なるべく入れたくないですよね Jvm なアノテーション.
const キーワード を使う
class Foo {
companion object {
const val myVar = "testing"
}
}
以下, 共に問題ありません.
// calling from Kotlin
Foo.myVar
// calling from Java
Foo.myVar;
同様に, パッケージレベルでは,
class BottomSheetView {
companion object {
const val BOTTOM_SHEET_ANIMATION_TIMING = 500L
}
// ...
}
animation.setTiming(BottomSheetView.BOTTOM_SHEET_ANIMATION_TIMING)
Companion object is initialized from the static constructor of the containing class and plain object is initialized lazily on the first access to that object.
こんなかんじでしっくりくる記述って見つけにくい気がしません? Kotlin て.