Avatar ·

Inicialização de propriedades em Kotlin: `by lazy` vs `lateinit` — quando usar cada um?

Olá a todos! Estou migrando de Java para Kotlin e me deparei com a dificuldade de entender a diferença entre `by lazy` e `lateinit` para inicialização tardia de propriedades. Parece que ambos resolvem o mesmo problema — não inicializar a propriedade imediatamente ao criar o objeto, mas sim mais tarde, quando ela for realmente necessária. Mas eu fico constantemente confuso sobre qual opção escolher. Por exemplo, estou escrevendo um simples Android ViewModel. Preciso obter uma referência ao repositório, que é inicializado via DI (Dagger/Hilt), mas não quero torná-la nullable: ```kotlin // Opção com lateinit class MyViewModel : ViewModel() { lateinit var repository: MyRepository fun loadData() { // Aqui tenho certeza de que repository já foi inicializado repository.fetchData() } } ``` ```kotlin // Opção com lazy class MyViewModel : ViewModel() { val repository: MyRepository by lazy { MyRepository() // Ou alguma factory } } ``` No primeiro caso, eu preciso chamar `repository = ...` em algum lugar antes de u