静态字段
在命名对象或伴生对象中声明的 Kotlin 属性会在该命名对象或包含伴生对象的类中 具有静态幕后字段。
通常这些字段是私有的,但可以通过以下方式之一暴露出来:
@JvmField 注解;
lateinit 修饰符;
const 修饰符。
静态方法
如上所述,Kotlin 将包级函数表示为静态方法。 Kotlin 还可以为命名对象或伴生对象中定义的函数生成静态方法,如果你将这些函数标注为 @JvmStatic 的话。 如果你使用该注解,编译器既会在相应对象的类中生成静态方法,也会在对象自身中生成实例方法。 例如:
class C {
companion object {
@JvmStatic fun foo() {}
fun bar() {}
}
}
可见性
Kotlin 的可见性以下列方式映射到 Java:
private 成员编译成 private 成员;
private 的顶层声明编译成包级局部声明;
protected 保持 protected(注意 Java 允许访问同一个包中其他类的受保护成员, 而 Kotlin 不能,所以 Java 类会访问更广泛的代码);
internal 声明会成为 Java 中的 public。internal 类的成员会通过名字修饰,使其 更难以在 Java 中意外使用到,并且根据 Kotlin 规则使其允许重载相同签名的成员 而互不可见;
public 保持 public。