Sobes.tech
Middle

Kada naudoti 'lateinit' ir 'by lazy' Kotlin?

sobes.tech AI

Atsakymas iš AI

lateinit naudojamas non-nullable savybėms, kurios bus vėliau inicializuotos, prieš pirmąjį jų naudojimą. Naudojama su var.

klasė UserActivity : AppCompatActivity() {
    lateinit var binding: ActivityUserBinding // Bus inicializuota onCreate

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityUserBinding.inflate(layoutInflater)
        setContentView(binding.root)
        // Dabar galima naudoti binding
    }
}

by lazy naudojamas non-nullable arba nullable savybėms, kurios inicializuojamos pirmo pasiekimo metu. Naudojama su val.

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

Palyginimas:

Bruožas lateinit by lazy
Naudojimas var val
Savybės tipas Non-nullable Non-nullable arba nullable
Inicializacija Vėliau, rankiniu būdu Pirmo pasiekimo metu, automatiškai
Srauto saugumas Ne garantuojama (jei nėra sinchronizuota rankiniu būdu) Garantijuojama automatiškai (sinchronizuota)
Nulinė reikšmė Neleidžiama iki inicializacijos (mestų išimtį) Nėra (tipas nustatomas inicializatoriumi)

Naudokite lateinit, kai savybės reikšmė priklauso nuo konteksto ar kitų veiksnių ir turi būti nustatyta po objekto sukūrimo, bet prieš naudojimą (pavyzdžiui, Android Activity, kai pririšate View).

Naudokite by lazy savybėms, kurios yra brangios kurti arba gali būti nereikalingos viso objekto gyvavimo metu, arba kai norite atidėti inicializaciją iki pirmojo faktiško naudojimo.