Kotlin中的静态方法和变量:如何替代Java的static?
你好!我正在从Java迁移到Kotlin,遇到了一个问题。在Java中,我经常使用静态方法和变量来创建工具类、常量或工厂方法。例如,下面是一个简单的Java类:
```java
public class MathUtils {
public static final double PI = 3.14159;
public static double square(double x) {
return x * x;
}
}
```
我尝试在Kotlin中编写相同的代码,但编译器在使用`static`关键字时报错。我了解到Kotlin没有直接的`static`,但有一些“companion objects”。我尝试了:
```kotlin
class MathUtils {
companion object {
val PI = 3.14159
fun square(x: Double): Double = x * x
}
}
```
这可以工作,但有几个问题让我困惑:
1. 为什么需要写`companion object`而不是直接使用`static`?
2. 是否可以不创建类实例就调用这些方法,就像在Java中一样(`MathUtils.square(5.0)`)?
3. 是否有更简