Java から Kotlin のメソッドを呼び出すときに気をつけること(@JvmStatic)
ちょっとした「こういうもんなのか」ということがあったので備忘録的に残しておく。
Kotlin で書かれたオブジェクト「DataStore」があるとする。
// kotlin
object DataStore {
private val shared: DataStore = DataStore
fun shared(): DataStore {
return shared
}
fun setup(context: Context) {
}
}
このクラスの shared
メソッドを Java から呼び出す場合は INSTANCE
を経由して呼び出す必要がある。
// java
DataStore.INSTANCE.shared().setup(context);
しかし、 DataStore の shared
に JvmStatic
アノテーションを付けると…、
// kotlin
object DataStore {
private val shared: DataStore = DataStore
@JvmStatic
fun shared(): DataStore {
return shared
}
fun setup(context: Context) {
}
}
INSTANCE
を経由せずに呼び出すことができる。
// java
DataStore.shared().setup(context);
詳しい調査・解説はまた時間があるときに。