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 თვისებებისთვის, რომლებიც ძვირია შექმნის დროს ან შეიძლება არ იყოს საჭირო მთელი ობიექტის სიცოცხლის განმავლობაში, ან როდესაც ინიციალიზაციას გსურთ გადადოთ პირველ რეალურ გამოყენებამდე.