为什么无法从 Java 代码访问 Companion 对象?

Why Companion object is not accessible from Java code?

众所周知,Kotlin 和 Java 是可以互操作的。当我尝试访问 Kotlin 代码中的 Java 静态变量时它可以工作,但是当我尝试访问 Java 中的伴随对象时它不起作用。

你只需要添加JvmStatic注解

companion object{
    @JvmStatic
    val x=10
}

您需要明确指定 Companion。 Java:

    MyFragment newFragment = MyFragment.Companion.newInstance();

那是因为同伴的方法不是静态的。 companion 是静态的,但它的方法是常规的实例方法。

Kotlin 本身没有静力学。

通过显式引用 Companion 实例,可以在 Java 中访问伴随对象的属性:

class MyKotlinClass {
    companion object {
        val someProperty = 42
    }
}

来自 Java:

int someProperty = MyKotlinClass.Companion.getSomeProperty();

您还可以通过使用特定于 JVM 的注释强制 Kotlin 输出带有静态成员的字节码(对于 Java):

class MyKotlinClass {
    companion object {
        @JvmStatic
        val someProperty = 42
    }
}

来自 Java:

int someProperty = MyKotlinClass.getSomeProperty();