Avatar ·

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