我刚刚开始研究Kotlin编程语言,它比Java酷得多.我对静电的方法和领域有一些疑问:

Q1: Official document says

Kotlin还可以为名为中定义的函数生成静电方法 对象或伴随对象(如果您将这些函数注释为 @JvmStatic.

But if you see below I can access bar() method as a static method, which works without using @JvmStatic annotation. But on official doc its throwing error -> 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: Do I really need 100 and 101 to make things static?

推荐答案

You can access members of a companion object as C.bar() in Kotlin, but not in Java. Without @JvmStatic, you would need to use C.Companion.bar() in Java, just as said in the docs.

注意,没有@JvmStatic时,函数会编译成一个实例(非静电)方法,在JavaC.Companion中会调用该方法(并且Kotlin只是将其缩短为对C的调用,但本质上是一样的),所以是的,您需要@JvmStatic@JvmField来在编译成静电成员的伴随对象中进行声明.

基本上,@JvmStatic@JvmField是用于Java互操作的工具,它们有助于创建Java友好的API,如果您不需要从Java调用Kotlin成员(例如,它们是Kotlin项目的内部成员,或者您正在开发一个不太可能与Java一起使用的库),您可以让它们保持原样.

Kotlin相关问答推荐

在kotlin中使用List(mylist. size){index—TODO()}或Map迭代>

在Spring Boot应用程序中使用网络请求功能将关键字挂起作为冗余

kotlin短路列表判断吗?

通过快捷键手动砍掉功能参数等

ActivityResultContracts TakePicture 结果总是返回 false

区分函数和扩展

每个 Kotlin 版本的默认 Kotlin 语言版本是什么?

Jetpack Compose 中的连续重组

TestContainers PostgreSQLContainer 与 Kotlin 单元测试:Not enough information to infer type variable SELF

Firestore - 如何在 Kotlin 中排除数据类对象的字段

kotlin RecyclerView分页

API 26 上未显示 Android 通知

创建Spring和#180的实例;Kotlin中的参数化类型引用

在 Kotlin 中创建非绑定服务

将字符串转换为HashMap的最简单方法

判断EditText是否为空kotlin android

为什么 Kotlin 会收到这样的 UndeclaredThrowableException 而不是 ParseException?

Android Compose 生产准备好了吗?

如何在 Kotlin 中定义新的运算符?

Android Jetpack Compose - 图像无法zoom 到框的宽度和高度