gpt4 book ai didi

android - Kotlin 静态函数 : companion object, @JvmStatic @JvmField

转载 作者:IT老高 更新时间:2023-10-28 13:44:14 26 4
gpt4 key购买 nike

我刚刚开始使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com