Sobes.tech
Middle

Wanneer moet je 'lateinit' en 'by lazy' gebruiken in Kotlin?

sobes.tech AI

Antwoord van AI

lateinit wordt gebruikt voor niet-nullbare eigenschappen die later worden geïnitialiseerd, voor de eerste toegang tot hen. Het wordt toegepast met var.

class UserActivity : AppCompatActivity() {
    lateinit var binding: ActivityUserBinding // Wordt geïnitialiseerd in onCreate

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityUserBinding.inflate(layoutInflater)
        setContentView(binding.root)
        // Nu kan binding worden gebruikt
    }
}

by lazy wordt gebruikt voor niet-nullbare of nullable eigenschappen die bij eerste toegang worden geïnitialiseerd. Het wordt toegepast met val.

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

Vergelijking:

Kenmerk lateinit by lazy
Toepassing var val
Eigenschapstype Non-nullable Non-nullable of nullable
Initialisatie Laat, handmatig Bij eerste toegang, automatisch
Threadveiligheid Niet standaard gegarandeerd (moet handmatig gesynchroniseerd worden) Standaard gegarandeerd (gesynchroniseerd)
Nullwaarde Niet toegestaan vóór initialisatie (zal uitzondering werpen) Nee (type wordt bepaald door de initializer)

Gebruik lateinit wanneer de waarde van de eigenschap afhankelijk is van de context of andere factoren en moet worden ingesteld na het maken van het object, maar voor het gebruik ervan (bijvoorbeeld bij het binden van views in een Android-activiteit).

Gebruik by lazy voor eigenschappen die kostbaar zijn om te maken of mogelijk niet nodig zijn gedurende de hele levensduur van het object, of wanneer je de initialisatie wilt uitstellen tot het eerste daadwerkelijke gebruik.