Sobes.tech
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ə.