Avatar ·

为什么以及何时需要在 Kotlin 的 companion 对象中使用 @JvmStatic

大家好!我开始学习 Kotlin 并重写一个旧的 Java 项目。遇到了 companion 对象中令人困惑的情况。 我有这样的 Kotlin 代码: ```kotlin class MyUtils { companion object { fun formatDate(date: Date): String { // 日期格式化 return SimpleDateFormat("yyyy-MM-dd", Locale.US).format(date) } const val MAX_COUNT = 100 } } ``` 从 Java 代码中我尝试这样调用这个方法: ```java String formatted = MyUtils.formatDate(new Date()); ``` 但编译器报错了!不得不写成 `MyUtils.Companion.formatDate(...)`,这看起来很糟糕。我读过关于 `@JvmStatic` 注解的内容,但不太明白: 1. 为什么 Kotlin 会这样?在 Java 中我可以直接调用类的静态方法。 2. 什么时候需要添加 `@JvmStatic`?对于 companion 对象总是必须的吗? 3. 对于常量,`@JvmStatic` 和 `@JvmField` 有区别吗? 请解释一下,