我怎样才能引用从Java的伴侣对象?

我有一个混合的项目, JavaKotlin类,我想知道如何从Java类引用companion objects

Kotlin中的伴侣对象具有静态支持字段和方法,以便与Java互操作,所以如果您已经正确注释了这些对象(使用@JvmStatic和@JvmField),则可以将它们视为静态类。 所以:

 class C { companion object { @JvmStatic fun foo() {} fun bar() {} } } 

foo可以像Java一样从静态函数中访问。 酒吧不能。

 C.foo(); // works fine C.bar(); // error: not a static method C.Companion.foo(); // instance method remains C.Companion.bar(); // the only way it works 

除了使用JvmField,您还可以对字段执行相同的操作

 class Key(val value: Int) { companion object { @JvmField val COMPARATOR: Comparator<Key> = compareBy<Key> { it.value } } } 

然后:

 // Java Key.COMPARATOR.compare(key1, key2); // public static final field in Key class 

你也可以使用const。

 // file: Example.kt object Obj { const val CONST = 1 } class C { companion object { const val VERSION = 9 } } const val MAX = 239 

在Java中:

 int c = Obj.CONST; int d = ExampleKt.MAX; int v = C.VERSION; 

有关详细信息,请参阅文档中的Java to Kotlin互操作 (示例全部都是从那里复制粘贴的)。

如果您想与Java进行经常互操作,我建议您更好地了解(并使用)JvmStatic和JvmField注释,因为它们对于使Kotlin与Java交互平顺至关重要。

好的! 如果你有这样的东西:

 class MyKotlinClass { companion object { val VAR_ONE = 1 val VAR_TWO = 2 val VAR_THREE = 3 fun printOne() { println(VAR_ONE) } } } 

您可以通过这种方式访问​​Java类中的字段

 public class MyJavaClass { private void myMethod(){ MyKotlinClass.Companion.getVAR_ONE(); //The same for methods MyKotlinClass.Companion.printOne(); } } 

这是伴随对象的Kotlin类。

 class A { companion object { @JvmStatic fun foo() {} fun bar() {} } } 

从Java调用Kotlin类伴侣对象:

 A.foo(); A.Companion.foo(); A.Companion.bar();