Avatar ·

Por que e quando usar @JvmStatic em companion objects do Kotlin?

Olá a todos! Comecei a estudar Kotlin e estou reescrevendo um projeto Java antigo. Me deparei com uma situação confusa com companion objects.\n\nEu tenho este código em Kotlin:\n\n```kotlin\nclass MyUtils {\n companion object {\n fun formatDate(date: Date): String {\n // formatação de data\n return SimpleDateFormat("yyyy-MM-dd", Locale.US).format(date)\n }\n \n const val MAX_COUNT = 100\n }\n}\n```\n\nDo código Java, estou tentando chamar este método assim:\n\n```java\nString formatted = MyUtils.formatDate(new Date());\n```\n\nMas o compilador dá erro! Tenho que escrever `MyUtils.Companion.formatDate(...)`, o que parece horrível. Li sobre a anotação `@JvmStatic`, mas não entendo completamente:\n\n1. Por que o Kotlin se comporta assim? Afinal, em Java eu poderia simplesmente chamar um st