为什么无法从 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();
众所周知,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();