Data object — Kotlin'de (1.9 sürümünden itibaren) duyurulan yeni bir tanım türüdür; singleton nesne özelliklerini ve data class'ını birleştirir. Tek bir nesne örneğine sahip olmak ve otomatik olarak oluşturulan equals, hashCode, toString yöntemlerini (data class gibi) elde etmek için tasarlanmıştır.
Önceden, otomatik olarak oluşturulmuş toString() ve equals() yöntemi olan benzersiz varlıkları saklamak için ya kendi uygulamalarını yazmak zorundaydık ya da tek bir nesne (örnek yerine) ile data class kullanmak zorunda kalıyorduk.
Singleton nesneleri (object) otomatik olarak oluşturulmuş equals, hashCode, toString'e sahip değildir, oysa data class çok sayıda örnek öngörür, bu da sınırlı enum-benzeri modeller için uygun değildir.
Data object ile birlikte her iki sorun da özlü bir şekilde çözülmüştür:
Kod örneği:
data object LoadingState data object NoData println(LoadingState == LoadingState) // true println(LoadingState.toString()) // LoadingState
Anahtar özellikler:
Data object ile sıradan object arasındaki fark nedir?
Yalnızca data object derleyici düzeyinde equals, hashCode, toString yöntemlerinin otomatik oluşturulmasını alır; sıradan object, Any'den (referans eşitliği, zayıf toString) uygulamaları kullanır.
Parametreli constructor ile data object yapabilir miyim?
Hayır, data object'in parametreli bir constructor'u olamaz. Her zaman parametresizdir, çünkü sadece bir nesne örneği vardır.
Data object miras alabilir mi?
Evet, data object arayüzleri, sealed interface dahil olmak üzere uygulayabilir ve durum hiyerarşilerinin bir parçası olabilir.
Örnek:
sealed interface Result data object Success : Result data object Failure : Result
Geliştirici "veri yok" durumunu object NoData olarak modelliyor, ardından equals() ile başka bir nesne ile karşılaştırıyor ve beklenmedik bir sonuç alıyor (referans kontrolü, değil içerik kontrolü).
Artıları:
Eksileri:
Data object, yükleme durumları için kullanılır; eşitlik ve yazdırma beklenen data class kurallarına göre gerçekleşir. Model katmanı güvenle durumlar üzerinde kalıp eşleşmesi kullanır.
Artıları:
Eksileri: