Avatar ·

Initialisation des propriétés en Kotlin : `by lazy` vs `lateinit` — quand utiliser quoi ?

Bonjour à tous ! Je passe de Java à Kotlin et je rencontre une incompréhension de la différence entre `by lazy` et `lateinit` pour l'initialisation différée des propriétés. Apparemment, les deux résolvent le même problème — ne pas initialiser une propriété immédiatement lors de la création de l'objet, mais le faire plus tard, quand elle est réellement nécessaire. Mais je confonds constamment quelle option choisir. Par exemple, j'écris un simple Android ViewModel. J'ai besoin d'obtenir une référence vers un repository, qui est initialisé via DI (Dagger/Hilt), mais je ne veux pas le rendre nullable : ```kotlin // Option avec lateinit class MyViewModel : ViewModel() { lateinit var repository: MyRepository fun loadData() { // Ici je suis sûr que repository est déjà initialisé repository.fetchData() } } ``` ```kotlin // Option avec lazy class MyViewModel : ViewModel() { val repository: MyRepository by lazy { MyRepository() // Ou une fabrique quelconque } } ``` Dans le premier cas, je dois appeler `repository = ...` quelque part avant d'utiliser