Middle
Երբ պետք է օգտագործել 'lateinit' և 'by lazy' Kotlin-ում?
sobes.tech AI
Պատասխան AI-ից
lateinit օգտագործվում է ոչ-nullable հատկությունների համար, որոնք կստեղծվեն ավելի ուշ, առաջին անգամ դրանց հասանելիությունից առաջ։ Կիրառվում է var-ի հետ։
class UserActivity : AppCompatActivity() {
lateinit var binding: ActivityUserBinding // Կստեղծվի onCreate-ում
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityUserBinding.inflate(layoutInflater)
setContentView(binding.root)
// Այժմ կարող եք օգտագործել binding-ը
}
}
by lazy օգտագործվում է ոչ-nullable կամ nullable հատկությունների համար, որոնք ստեղծվում են առաջին հասանելիության ժամանակ։ Կիրառվում է val-ի հետ։
class DataManager {
val apiService: ApiService by lazy {
Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}
Համեմատություն:
| Գծանշում | lateinit |
by lazy |
|---|---|---|
| Կիրառում | var |
val |
| Գծանշի տեսակ | Non-nullable | Non-nullable կամ nullable |
| Ինիցիալիզացիա | Ուշ, ձեռքով | Առաջին հասանելիության ժամանակ, ավտոմատ կերպով |
| Տարածքային անվտանգություն | Անհրաժեշտ չէ ստանդարտորեն (եթե ձեռքով չի սինխրոնիզացվում) | Ստանդարտորեն ապահովված (սինխրոնիզացված) |
| Զրոյական արժեք | Չի թույլատրվում մինչև ինիցիալիզացիա (գցում է արտահայտություն) | Չի, տիպը որոշվում է ինիցիալիզատորով |
Օգտագործեք lateinit, երբ հատկության արժեքը կախված է կոնտեքստից կամ այլ գործոններից և պետք է սահմանվի ստեղծելուց հետո, բայց օգտագործելուց առաջ (օրինակ, Android Activity-ում View-ների կապակցման ժամանակ):
Օգտագործեք by lazy հատկությունների համար, որոնք ծախսատար են ստեղծման ժամանակ կամ կարող են չպահանջվել ողջ օբյեկտի կյանքի ընթացքում, կամ երբ անհրաժեշտ է հետաձգել ինիցիալիզացիան մինչև առաջին իրական օգտագործումը։