静态域
申明在命名对象或companion 对象中的Kotlin属性将有一个静态的backing field,静态域在命名对象或包含companion对象中的类中。
通常这样的域是private的,但是它们可以以以下的任意方式暴露出来:
- @JvmField注解
- lateinit修饰符
- const修饰符
使用@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
对象或companion对象的一个懒加载属性有一个静态的backing field,并且该属性与属性的setter有相同的可见性。
object Singleton {
lateinit var provider: Provider
}
// Java
Singleton.provider = new Provider();
// public static non-final field in Singleton class
标注成const的属性被转换成Java的静态域:
// 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;