Sobes.tech
Middle

როდის უნდა გამოიყენოთ 'lateinit' და 'by lazy' Kotlin-ში?

sobes.tech AI

პასუხი AI-სგან

lateinit გამოიყენება არა-nullable თვისებებისთვის, რომლებიც მოგვიანებით იწარმოება, პირველ მისვლამდე მათზე. გამოიყენება var-თან.

კლასი 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-თან.

კლასი 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
თვისების ტიპი არა-nullable არა-nullable ან nullable
ინიციალიზაცია მოგვიანებით, ხელით პირველ მისვლაზე, ავტომატურად
ნაკადი უსაფრთხოება არ არის გარანტირებული (თუ არ არის სინქრონიზებული ხელით) გარანტირებული ავტომატურად (სინქრონიზებული)
ნულოვანი მნიშვნელობა არ იძლევა ინიციალიზაციის წინ (გადაგდება გამონაკლისს) არა (ტიპი განსაზღვრულია ინიციალიზატორით)

გამოიყენეთ lateinit, როდესაც თვისების მნიშვნელობა დამოკიდებულია კონტექსტზე ან სხვა ფაქტორებზე და უნდა იყოს მითითებული შექმნის შემდეგ, მაგრამ გამოყენებამდე (მაგალითად, Android Activity-ში View-ების ბაილდინგის დროს).

გამოიყენეთ by lazy თვისებებისთვის, რომლებიც ძვირია შექმნის დროს ან შეიძლება არ იყოს საჭირო მთელი ობიექტის სიცოცხლის განმავლობაში, ან როდესაც ინიციალიზაციას გსურთ გადადოთ პირველ რეალურ გამოყენებამდე.