静态域

申明在命名对象或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;

results matching ""

    No results matching ""