Middle
Kotlin'de 'lateinit' ve 'by lazy' ne zaman kullanılmalı?
sobes.tech yapay zeka
AI'dan gelen yanıt
lateinit kullanımı, ilk erişimden önce daha sonra başlatılacak olan null olmayan özellikler içindir. var ile kullanılır.
class UserActivity : AppCompatActivity() {
lateinit var binding: ActivityUserBinding // onCreate içinde başlatılacak
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityUserBinding.inflate(layoutInflater)
setContentView(binding.root)
// Artık binding kullanılabilir
}
}
by lazy ise, ilk erişimde başlatılan null veya null olmayan özellikler içindir. val ile kullanılır.
class DataManager {
val apiService: ApiService by lazy {
Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}
Karşılaştırma:
| Özellik | lateinit |
by lazy |
|---|---|---|
| Kullanım | var |
val |
| Özellik tipi | Null olmayan | Null olmayan veya null olabilir |
| Başlatma | Sonradan, manuel | İlk erişimde, otomatik |
| Çoklu iş parçacığı güvenliği | Varsayılan olarak garanti edilmez (manuel senkronizasyon gerekebilir) | Varsayılan olarak garanti edilir (senkronize) |
| Null değeri | Başlatmadan önce izin verilmez (istisna atar) | Hayır (tip, başlatıcı tarafından belirlenir) |
lateinit kullanın, özellik değeri bağlam veya diğer faktörlere bağlıysa ve nesne oluşturulduktan sonra, ama kullanımdan önce ayarlanması gerekiyorsa (örneğin, Android Activity'de View bağlama). by lazy kullanın, maliyetli olan veya tüm nesne ömrü boyunca gerek olmayabilecek özellikler için veya ilk kullanıma kadar başlatmayı ertelemek istediğinizde.