7 java interop kotlin companion-object
我有一个混合项目Java
和Kotlin
课程,我想知道如何companion objects
从我的Java
课程中引用.
Kotlin中的伴随对象具有静态支持字段和方法,以便与Java交互,因此如果您正确地注释它们(使用@JvmStatic和@JmmField),您基本上可以将它们视为静态类.所以:
class C {
companion object {
@JvmStatic fun foo() {}
fun bar() {}
}
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
除了使用JvmField之外,您可以对字段执行相同的操作
class Key(val value: Int) {
companion object {
@JvmField val COMPARATOR: Comparator<Key> = compareBy<Key> { it.value }
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
// Java
Key.COMPARATOR.compare(key1, key2);
// public static final field in Key class
Run Code Online (Sandbox Code Playgroud)
你也可以使用const.
// file: Example.kt
object Obj {
const val CONST = 1
}
class C {
companion object {
const val VERSION = 9
}
}
const val MAX = 239
Run Code Online (Sandbox Code Playgroud)
在Java中:
int c = Obj.CONST;
int d = ExampleKt.MAX;
int v = C.VERSION;
Run Code Online (Sandbox Code Playgroud)
有关细节的详细信息,请参阅文档中的Java to Kotlin interop(无论如何都要从中复制粘贴示例).
如果你想经常与Java互操作,我建议你很好地了解(并使用)JvmStatic和JvmField注释,因为它们对于平滑Kotlin到Java交互非常重要.
小智 3
好的!如果你有类似的东西:
class MyKotlinClass {
companion object {
val VAR_ONE = 1
val VAR_TWO = 2
val VAR_THREE = 3
fun printOne() {
println(VAR_ONE)
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过这种方式访问 Java 类中的字段
public class MyJavaClass {
private void myMethod(){
MyKotlinClass.Companion.getVAR_ONE();
//The same for methods
MyKotlinClass.Companion.printOne();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
852 次 |
最近记录: |