静态方法

如上所述,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方法变为静态的。

results matching ""

    No results matching ""