Middle
Kad būtu jālieto 'lateinit' un 'by lazy' Kotlin?
sobes.tech AI
Atbilde no AI
lateinit tiek izmantojamām īpašībām, kas nav nullable, bet tiks iepriekš vēlāk, pirms pirmās piekļuves tām. Lieto ar var.
klase UserActivity : AppCompatActivity() {
lateinit var binding: ActivityUserBinding // Tiks inicializēts onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityUserBinding.inflate(layoutInflater)
setContentView(binding.root)
// Tagad var izmantot binding
}
}
by lazy tiek izmantots non-nullable vai nullable īpašībām, kas tiek inicializētas pirmreiz, kad piekļūst tām. Lieto ar val.
klase DataManager {
val apiService: ApiService by lazy {
Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}
Salīdzinājums:
| Raksturlielums | lateinit |
by lazy |
|---|---|---|
| Lietošana | var |
val |
| Īpašības tips | Non-nullable | Non-nullable vai nullable |
| Inicializācija | Vēlāk, manuāli | Pirmreiz, automātiski |
| Plūsmas drošība | Nav garantēta (ja nav sinhronizēta manuāli) | Garantēta automātiski (sinhronizēta) |
| Nulle vērtība | Nav atļauta pirms inicializācijas (mestīs izņēmumu) | Nav (tips noteikts ar inicializatoru) |
Izmantojiet lateinit, kad īpašības vērtība ir atkarīga no konteksta vai citiem faktoriem un tai jābūt iestatītai pēc objekta izveides, bet pirms tās izmantošanas (piemēram, Android aktivitātē, kad piesaistāt skatus).
Izmantojiet by lazy īpašībām, kas ir dārgas izveidē vai var nebūt nepieciešamas visa objekta dzīves laikā, vai kad vēlaties atlikt inicializāciju līdz pirmajai faktiskajai izmantošanai.