Middle
Kotlin-də 'lateinit' və 'by lazy' nə vaxt istifadə edilməlidir?
sobes.tech Süni İntellekt
AI-dan cavab
lateinit nullable olmayan xüsusiyyətlər üçün istifadə olunur və daha sonra, birinci girişdən əvvəl başlanacaq. var ilə tətbiq edilir.
class UserActivity : AppCompatActivity() {
lateinit var binding: ActivityUserBinding // onCreate-də başlanacaq
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityUserBinding.inflate(layoutInflater)
setContentView(binding.root)
// İndi binding istifadə oluna bilər
}
}
by lazy nullable və nullable olmayan xüsusiyyətlər üçün istifadə olunur və birinci girişdə başlanır. val ilə tətbiq edilir.
class DataManager {
val apiService: ApiService by lazy {
Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}
Müqayisə:
| Xüsusiyyət | lateinit |
by lazy |
|---|---|---|
| Tətbiq | var |
val |
| Xüsusiyyət tipi | Non-nullable | Non-nullable və ya nullable |
| Başlanğıc | Sonradan, əl ilə | Birinci girişdə, avtomatik |
| İstiqamət təhlükəsizliyi | Standart olaraq təmin edilmir (əllə sinxronlaşdırmaq lazım ola bilər) | Standart olaraq təmin edilir (sinxronlaşdırılmış) |
| Null dəyər | Başlanmadan əvvəl icazə verilmir (istisna atacaq) | Xeyr (tip, başlatıcı ilə müəyyən edilir) |
lateinit istifadə edin, xüsusiyyətin dəyəri kontekstə və ya digər amillərə bağlıdırsa və obyekt yaradıldıqdan sonra, lakin istifadə edilmədən əvvəl təyin edilməlidir (məsələn, Android Activity-də View-lərin bağlanması).
by lazy istifadə edin, xüsusiyyətlər yaradılması bahalıdırsa və ya bütün obyektin ömrü boyunca lazım olmaya bilər və ya ilkin istifadəyə qədər gecikdirmək istəyirsinizsə.