Kotlin, tür güvenliğine ve null işaretçilerinin önlenmesine odaklanır, ancak genellikle değişkenlerin gecikmeli (late) olarak başlatılması gereksinimi ortaya çıkar, örneğin, bağımlılık enjeksiyonu kullanırken veya Android Aktivitesinde. Bu amaçla lateinit modifikatörü eklenmiştir.
Normal özellikler zorunlu başlatma gerektirir veya nullable olmalıdır, bu da gecikmeli ancak zorunlu başlatmanın garanti edildiği durumlarda rahatsız edicidir. Nullable türlerin kullanımı kodu karmaşık hale getirir ve ek null kontrolleri gerektirir.
lateinit, başlangıçta başlatılmamış bir özellik oluşturmanıza izin verir, ancak derleyiciye ilk kullanımdan önce başlatılacağına söz verirsiniz. Başlatma, yapıcıda değil, daha sonra yapılabilir.
class UserViewModel { lateinit var repository: UserRepository fun onCreate() { repository = UserRepository() } fun getData() = repository.load() }
Ana özellikler:
lateinit, val özellikleri için kullanılabilir mi?
Hayır. lateinit sadece var ile çalışır, çünkü val hemen bir kez başlatılmalıdır veya getter aracılığıyla yapılmalıdır.
lateinit, Int, Boolean, Double ve diğer ilkel türlerle çalışır mı?
Hayır. Sadece nesne referans türleri ile çalışır. İlkel türler için nullable türler kullanın.
lateinit özelliğe başlatmadan erişirseniz ne olur?
Kotlin, UninitializedPropertyAccessException fırlatır:
lateinit var foo: String println(foo) // Hata
Geliştirici, lateinit var item: String tanımladı, ilk kez getItem metodunu çağırmadan başlatmadı. Sonuç: uygulama çökmesi.
Artıları:
Eksileri:
Android Aktivitesi: lateinit var presenter, onCreate'de başlangıç. presenter'ı tüm yaşam döngüsü metodlarında kullanmak güvenlidir: nullability gerekmez.
Artıları:
Eksileri: