Middle
Kedy by ste mali použiť 'lateinit' a 'by lazy' v Kotlin?
sobes.tech AI
Odpoveď od AI
lateinit saťahuje pre nenulových vlastností, ktoré budú neskôr inicializované, pred prvým prístupom k nim. Používa sa s var.
class UserActivity : AppCompatActivity() {
lateinit var binding: ActivityUserBinding // Bude inicializované v onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityUserBinding.inflate(layoutInflater)
setContentView(binding.root)
// Teraz je možné použiť binding
}
}
by lazy sa používa pre nenulové alebo nulové vlastnosti, ktoré sú inicializované pri prvom prístupe. Používa sa s val.
class DataManager {
val apiService: ApiService by lazy {
Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}
Porovnanie:
| Vlastnosť | lateinit |
by lazy |
|---|---|---|
| Použitie | var |
val |
| Typ vlastnosti | Non-nullable | Non-nullable alebo nullable |
| Inicializácia | Neskoro, manuálne | Pri prvom prístupe, automaticky |
| Bezpečnosť vlákien | Nie je garantované (ak nie je synchronizované manuálne) | Garantované (synchronizované) |
| Nulová hodnota | Nie je povolená pred inicializáciou (vyhodí výnimku) | Nie (typ je určený inicializátorom) |
Použite lateinit, keď hodnota vlastnosti závisí od kontextu alebo iných faktorov a musí byť nastavená po vytvorení objektu, ale pred jej použitím (napríklad pri viazaní View v Android Activity).
Použite by lazy pre vlastnosti, ktoré sú nákladné na vytvorenie alebo nemusia byť potrebné počas celého života objektu, alebo keď chcete odložiť inicializáciu do prvého skutočného použitia.