Middle
Ի՞նչ տարբերություն կա 'lateinit' բանալի բառի օգտագործման և 'by lazy {}' միջոցով դելեգացիայի միջև Kotlin-ում։
sobes.tech AI
Պատասխան AI-ից
lateinit-ը օգտագործվում է փոփոխական հատկությունների հետաձգված և սկզբնականացման համար (var), որոնք չեն կարող լինել nullable և որոնք ավելի ուշ կսկսվեն, օրինակ՝ ակտիվության կամ ֆրագմենտի կյանքի ցիկլի մեթոդում։ Կոմպիլյատորը չի երաշխավորում սկզբնականացումը, և անհայտ հատկության հասանելիությունը կհանգեցնի UninitializedPropertyAccessException արտահայտության:
by lazy {}-ը օգտագործվում է փոփոխական հատկությունների հետաձգված և սկզբնականացման համար (val)։ Սկզբնականացումը կատարվում է առաջին մուտքի ժամանակ, և արդյունքը պահվում է կեշում։ Սա տրոոոբեազոր է ըստ նախնական կարգավորումների և երաշխավորում է, որ ինիցիալիզատորը կկոչվի միայն մեկ անգամ։
| Գծանշում | lateinit |
by lazy {} |
|---|---|---|
| Կիրառվում է | var |
val |
| Nullableություն | Չի կարող լինել nullable | Չի կարող լինել nullable |
| Ինիցիալիզացիայի երաշխիք | Չի (միայն ծրագրավորողի կողմից) | Այո (առաջին մուտքի ժամանակ) |
| Տրոոոբեազորություն | Չի երաշխավորվում ըստ նախնական կարգավորումների | Այո (նույնպես) |
| Գործառույթի տեսակ | Փոփոխական | Անփոփոխական |
Նմուշ lateinit-ով:
class MyActivity : AppCompatActivity() {
private lateinit var textView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView = findViewById(R.id.my_text_view)
textView.text = "Hello, lateinit!"
}
}
Նմուշ by lazy {}-ով:
class MyViewModel : ViewModel() {
private val apiService: ApiService by lazy { provideApiService() } // Ինիցիալիզացիա առաջին օգտագործման ժամանակ
private fun provideApiService(): ApiService {
// ApiService ստեղծելու տրամաբանություն
return ApiService()
}
fun fetchData() {
// apiService ինիցիալիզացվում է այստեղ առաջին կանչի ժամանակ fetchData()
apiService.getData()
}
}