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);
詳しい調査・解説はまた時間があるときに。