Métodos y variables estáticas en Kotlin: ¿cómo reemplazar Java static?
¡Hola! Estoy migrando de Java a Kotlin y me encontré con un problema. En Java solía usar métodos y variables estáticas para clases de utilidad, constantes o métodos de fábrica. Por ejemplo, una clase simple en Java:
```java
public class MathUtils {
public static final double PI = 3.14159;
public static double square(double x) {
return x * x;
}
}
```
Intenté escribir lo mismo en Kotlin, pero el compilador da un error al intentar usar la palabra clave `static`. Leí que en Kotlin no existe `static` como tal, pero hay algo llamado "companion objects". Probé:
```kotlin
class MathUtils {
companion object {
val PI = 3.14159
fun square(x: Double): Double = x * x
}
}
```
Esto funciona, pero me desconciertan varios puntos:
1. ¿Por qué hay que escribir `companion object` y no simplemente `static`?
2. ¿Se pueden llamar estos métodos sin crear una instancia de la clase, como en Java (`MathUtils.square(5.0)`)?
3. ¿Hay alguna forma más