静态方法
如上所述,Kotlin将包层级的函数作为静态方法。Kotlin也可以给标记了@JvmStatic的命名对象或companion对象生成静态方法。如果你使用这个注解,编译器会生成静态方法和方法实例:
class C {
companion object {
@JvmStatic fun foo() {}
fun bar() {}
}
}
现在foo()方法在Java中是静态的,bar()方法却不是:
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
对命名对象来说也是一样的:
object Obj {
@JvmStatic fun foo() {}
fun bar() {}
}
在Java中:
Obj.foo(); // works fine
Obj.bar(); // error
Obj.INSTANCE.bar(); // works, a call through the singleton instance
Obj.INSTANCE.foo(); // works too
@JvmStatic注解也可以被用在对象属性上或companion对象上,这样可以让他的setter和getter方法变为静态的。