All happens on android device running lollipop but I presume, it's applicable on "normal" JVM as well.
// KOTLIN
interface IStatic
open class Static(x: IStatic) {
fun doSth(){}
}
class ConcreteWithStatic : IStatic {
companion object : Static(ConcreteWithStatic())
}
Run this in a way that kotlin part is run before java's
// KOTLIN
ConcreteWithStatic.doSth()
// JAVA
// must be executed after Kotlin's code with doSth()
ConcreteWithStatic.Companion.doSth(); //crashes as here ConcreteWithStatic.Companion is null
If there was no execution of doSth() in Kotlin preceeding Java execution, everything works seemlessly. If doSth() in Kotlin was executed before! Java's code, Java sees companion object as null