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

Sau*_*age 0 java kotlin companion-object kotlin-companion

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

Jof*_*rey 5

Kotlin 本身没有静态。

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

class MyKotlinClass {
    companion object {
        val someProperty = 42
    }
}
Run Code Online (Sandbox Code Playgroud)

来自爪哇:

int someProperty = MyKotlinClass.Companion.getSomeProperty();
Run Code Online (Sandbox Code Playgroud)

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

class MyKotlinClass {
    companion object {
        @JvmStatic
        val someProperty = 42
    }
}
Run Code Online (Sandbox Code Playgroud)

来自爪哇:

int someProperty = MyKotlinClass.getSomeProperty();
Run Code Online (Sandbox Code Playgroud)