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