为什么以及何时需要在 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` 有区别吗?
请解释一下,