Métodos e variáveis estáticas em Kotlin: como substituir o static do Java?
Olá! Estou migrando de Java para Kotlin e me deparei com um problema. Em Java, eu usava frequentemente métodos e variáveis estáticas para classes utilitárias, constantes ou métodos de fábrica. Por exemplo, uma classe simples em Java:
```java
public class MathUtils {
public static final double PI = 3.14159;
public static double square(double x) {
return x * x;
}
}
```
Tentei escrever o mesmo em Kotlin, mas o compilador dá erro ao tentar usar a palavra-chave `static`. Li que em Kotlin não existe `static` como tal, mas existem "companion objects". Tentei:
```kotlin
class MathUtils {
companion object {
val PI = 3.14159
fun square(x: Double): Double = x * x
}
}
```
Isso funciona, mas me confundem alguns pontos:
1. Por que preciso escrever `companion object` em vez de apenas `static`?
2. Posso chamar esses métodos sem criar uma instância da classe, como em Java (`MathUtils.square(5.0)`)?
3. Existe uma forma mais simples?