Sobes.tech
Middle

Quand doit-on utiliser 'lateinit' et 'by lazy' en Kotlin?

sobes.tech IA

Réponse de l'IA

lateinit est utilisé pour les propriétés non nullables qui seront initialisées plus tard, avant la première utilisation. Il s'applique avec var.

class UserActivity : AppCompatActivity() {
    lateinit var binding: ActivityUserBinding // S'initialisera dans onCreate

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityUserBinding.inflate(layoutInflater)
        setContentView(binding.root)
        // Maintenant, on peut utiliser binding
    }
}

by lazy est utilisé pour les propriétés non nullables ou nullables, qui s'initialisent au premier accès. Il s'applique avec val.

class DataManager {
    val apiService: ApiService by lazy {
        Retrofit.Builder()
            .baseUrl("https://api.example.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(ApiService::class.java)
    }
}

Comparaison :

Caractéristique lateinit by lazy
Utilisation var val
Type de propriété Non nullable Non nullable ou nullable
Initialisation Tardive, manuelle Lors du premier accès, automatique
Sécurité thread Non garanti par défaut (si non synchronisé manuellement) Garantit par défaut (synchronisé)
Valeur nulle Non autorisée avant initialisation (lance une exception) Non (le type est déterminé par l'initialisateur)

Utilisez lateinit lorsque la valeur de la propriété dépend du contexte ou d'autres facteurs et doit être définie après la création de l'objet, mais avant son utilisation (par exemple, lors de la liaison de vues dans une Activity Android).

Utilisez by lazy pour les propriétés coûteuses à créer ou qui peuvent ne pas être nécessaires pendant toute la durée de vie de l'objet, ou lorsque l'initialisation doit être différée jusqu'au premier usage réel.