Avatar ·

Por qué y cuándo usar @JvmStatic en companion objects de Kotlin

¡Hola a todos! Empecé a aprender Kotlin y estoy reescribiendo un proyecto Java antiguo. Me encontré con una situación confusa con los companion objects. Tengo este código en Kotlin: ```kotlin class MyUtils { companion object { fun formatDate(date: Date): String { // formateo de fecha return SimpleDateFormat("yyyy-MM-dd", Locale.US).format(date) } const val MAX_COUNT = 100 } } ``` Desde código Java intento llamar a este método así: ```java String formatted = MyUtils.formatDate(new Date()); ``` ¡Pero el compilador da un error! Tengo que escribir `MyUtils.Companion.formatDate(...)`, que se ve horrible. Leí sobre la anotación `@JvmStatic`, pero no entiendo completamente: 1. ¿Por qué Kotlin se comporta así? En Java podía simplemente llamar a un método estático de la clase. 2. ¿Cuándo exactamente se debe agregar `@JvmStatic`? ¿Es siempre necesario para companion objects? 3. ¿Hay diferencia entre `@JvmStatic` y `@JvmField` para constantes? Explíquenme, por favor.