作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个混合项目,Java
和 Kotlin
类,我想知道如何引用 companion objects
来 self 的Java
类。
最佳答案
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 interop in the documentation (无论如何,示例都是从那里复制粘贴的)。
如果您想经常与 Java 进行互操作,我建议您了解(并使用)JvmStatic 和 JvmField 注解,因为它们对于平滑 Kotlin 与 Java 的交互非常重要。
关于java - 如何从 Java 中引用伴随对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44189129/
我是一名优秀的程序员,十分优秀!