我刚刚开始使用 Kotlin 编程语言,它比 Java 要酷得多。我对静态方法和字段有一些疑问:
Q1:官方文档说
Kotlin can also generate static methods for functions defined in named objects or companion objects if you annotate those functions as @JvmStatic.
但是,如果您在下面看到,我可以将 bar()
方法作为静态方法访问,该方法无需使用 @JvmStatic
注释即可工作。但是在官方文档上它的抛出错误-> Kotlin static method .
Class C{
companion object{
@JvmStatic
fun foo() { }
fun bar();
}
}
fun main(args: Array<String>) {
C.foo();
C.bar(); //this line works fine
}
Q2:我真的需要 @JvmStatic
和 @JvmField
来使事物静态化吗?
正如您在 companion
对象中看到的那样,一切都按预期进行。
最佳答案
您可以在 C.bar()
在 Kotlin 中访问 companion object
的成员,但在 Java 中则不行。如果没有 @JvmStatic
,您将需要使用 C.Companion.bar()
in Java,正如文档中所述。
请注意,如果没有 @JvmStatic
,该函数将编译为在 Java 中的 C.Companion
上调用的实例(非静态)方法(以及 Kotlin将其缩短为对 C
的调用,但在底层是相同的),所以是的,您需要 @JvmStatic
和 @JvmField
来将伴随对象中的声明编译为静态成员。
基本上,@JvmStatic
和 @JvmField
是 Java 互操作工具,有助于创建 Java 友好的 API,如果您不需要调用 Kotlin 成员来自 Java(例如,它们在您的 Kotlin 项目内部,或者您正在开发一个不太可能与 Java 一起使用的库),您可以保持它们原样。
关于android - Kotlin 静态函数 : companion object, @JvmStatic @JvmField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48225293/