Uygulamalı Reified Kalıpları: Ayrıştırma, DI ve Serileştirme
reified genellerini JSON ayrıştırma, bağımlılık çözümleme ve yansıma yardımcılarına uygulayın.
Uygulamalı Reified Kalıpları: Ayrıştırma, DI ve Serileştirme, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.
Üç Temel Kullanım Alanı
reified tür parametreleri, Kotlin'deki üç yinelenen örüntüde öne çıkar: JSON/veri ayrıştırma, bağımlılık ekleme ve serileştirme yardımcıları. Her biri, ::class.java bağımsız değişkenleri için gereken gereksiz kodu ortadan kaldırır.
Örüntü 1 — Tür Güvenli JSON Ayrıştırma
Gson veya Jackson'ı reified bir genişletme işleviyle sararak çağıranların bir Class değerini açıkça geçirmesini önleyin:
inline fun <reified T> String.parseJson(): T =
Gson().fromJson(this, T::class.java)
val user: User = jsonString.parseJson()Koleksiyonları Ayrıştırma
Genel bir listeyi ayrıştırmak için bir TypeToken gerekir. reified ile bu karmaşıklığı gizleyebilirsiniz:
inline fun <reified T> String.parseList(): List<T> {
val type = object : TypeToken<List<T>>() {}.type
return Gson().fromJson(this, type)
}
val users: List<User> = jsonString.parseList()kotlinx.serialization Yaklaşımı
kotlinx.serialization, kendi içinde zaten reified kullanır. Üst düzey decodeFromString, bir reified inline işlev olan serializer'a dayanır.
val user = Json.decodeFromString<User>(jsonString)
// equivalent to: Json.decodeFromString(serializer<User>(), jsonString)Örüntü 2 — Hizmet Bulucu / DI
Basit bir hizmet bulucu, çağıranların bir KClass geçirmesine gerek kalmadan bağımlılıkları türe göre çözümleyebilir:
object ServiceLocator {
val registry = mutableMapOf<KClass<*>, Any>()
inline fun <reified T : Any> get(): T =
registry[T::class] as? T ?: error("No binding for ${T::class}")
inline fun <reified T : Any> bind(instance: T) {
registry[T::class] = instance
}
}Android'de ViewModel Alma
En yaygın Android reified örüntüsü:
inline fun <reified VM : ViewModel> ComponentActivity.viewModel(): VM =
ViewModelProvider(this)[VM::class.java]
// Usage
val vm: MyViewModel by lazy { viewModel() }Örüntü 3 — Güvenli Tür Dönüştürme Yardımcısı
Geri dönüş içeren reified bir dönüştürme yardımcısı, her yerde açıkça as? kullanmaktan daha temizdir:
inline fun <reified T> Any?.safeCast(): T? = this as? T
val name: String? = someAny.safeCast<String>()Koleksiyonların Türünü Denetleme
Standart filterIsInstance, temel reified koleksiyon filtresidir. Bunun üzerine daha üst düzey varyantlar oluşturabilirsiniz:
inline fun <reified T> List<Any>.onlyInstancesOf(block: (T) -> Unit) =
filterIsInstance<T>().forEach(block)
items.onlyInstancesOf<Button> { it.setEnabled(true) }Olay Dinleyicilerini Türe Göre Kaydetme
Türe göre dağıtım yapan bir olay veri yolu, reified ile kullanışlı hâle gelir:
class EventBus {
val handlers = mutableMapOf<KClass<*>, (Any) -> Unit>()
inline fun <reified E : Any> on(noinline handler: (E) -> Unit) {
handlers[E::class] = { handler(it as E) }
}
fun post(event: Any) = handlers[event::class]?.invoke(event)
}reified ile Genişletme İşlevlerini Birleştirme
Genel tür alıcıları üzerindeki reified genişletme işlevleri, tür güvenliğini korurken API'lere akıcı bir kullanım hissi verir:
inline fun <reified T : Any> SharedPreferences.get(key: String, default: T): T = when (T::class) {
Int::class -> getInt(key, default as Int) as T
String::class -> getString(key, default as String) as T
Boolean::class -> getBoolean(key, default as Boolean) as T
else -> error("Unsupported type ${T::class}")
}Akılda Tutulması Gereken Sınırlar
Unutmayın: reified yalnızca inline işlevlerde çalışır. Sınıflar ve arayüzler reified tür parametrelerine sahip olamaz. Bir sınıfta çalışma zamanı tür bilgisine ihtiyacınız varsa bunun yerine bir KClass özelliği saklayın.
reified Yardımcılarını Test Etme
reified işlevleri kolayca test edilebilir; birim testlerinde bunları somut tür bağımsız değişkenleriyle çağırıp çıktı türünü ve değerini doğrulayabilirsiniz. Sınıf başvurularını taklit etmeniz gerekmez.
val result: List<String> = """["a","b","c"]""".parseList<String>()
assertEquals(listOf("a","b","c"), result)Kısa Kontrol
reified işlevleriyle ilgili hangi ifade doğrudur?
Özet: Pratik reified Örüntüleri
Temel örüntüler:
- JSON ayrıştırma: Class/TypeToken bağımsız değişkenlerini gizleme
- DI/Hizmet Bulucu: KClass parametreleri olmadan türe göre çözümleme
- Güvenli tür dönüştürme ve koleksiyon filtreleme
- Olay türüne göre olay veri yolu dağıtımı
- SharedPreferences / tür bilgili anahtar-değer depoları
Sıkça Sorulan Sorular
“Uygulamalı Reified Kalıpları: Ayrıştırma, DI ve Serileştirme” dersi ücretsiz mi?
Evet — “Uygulamalı Reified Kalıpları: Ayrıştırma, DI ve Serileştirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.
“Uygulamalı Reified Kalıpları: Ayrıştırma, DI ve Serileştirme” dersinde ne öğreneceğim?
reified genellerini JSON ayrıştırma, bağımlılık çözümleme ve yansıma yardımcılarına uygulayın. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Uygulamalı Reified Kalıpları: Ayrıştırma, DI ve Serileştirme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- inline İşlevleri: Lambda Ek Yükünü Ortadan Kaldırma
- noinline ve crossinline Değiştiricileri
- reified Tür Parametreleri: Çalışma Zamanında T'ye Erişme
- Uygulamalı Reified Kalıpları: Ayrıştırma, DI ve Serileştirme