CodeBlanks Logo Icon CodeBlanks

reified

reified ile runtime tür güvenliği öğrenirsin.

reified nedir?

Normalde bir generic fonksiyon içinde T'nin çalışma zamanı türüne erişemezsin; çünkü JVM'de tür silme (type erasure) uygulanır. reified bu kısıtı aşar.

Bir inline fonksiyonun tip parametresini reified işaretlersen, derleyici o türü çağrı yerine gerçek türle değiştirir. Örnek: inline fun <reified T> typeName(): String = T::class.simpleName ?: "?". Böylece typeName<Int>() çağrısı "Int" döner. reified yalnızca inline fonksiyonlarda çalışır.

reified ile filtreleme

reified'nin en yaygın kullanımlarından biri, bir listeden belirli bir türdeki öğeleri süzmektir.

Örnek: inline fun <reified T> List<Any>.filterOfType(): List<T> = filter { it is T }. Burada it is T kontrolü ancak reified ile çalışır; çünkü normalde T silinmiştir. Çağrı: list.filterOfType<Int>(). Bu model Kotlin standart kütüphanesinde de karşına çıkar.

Uygulama reified typeName yaz

inline fun <reified T> typeName(): String fonksiyonunu yaz. T::class.simpleName ?: "?" döndürsün. main içinde typeName<Int>() ve typeName<String>() çağrılarının sonuçlarını ayrı satırlarda yazdır.

Başlangıç kodu

Main.kt
// reified ekle
inline fun <T> typeName(): String = TODO()

fun main() {
    // Int ve String tür adlarını yazdır
}

Örnek çözüm

Main.kt
inline fun <reified T> typeName(): String = T::class.simpleName ?: "?"
fun main() {
    println(typeName<Int>())
    println(typeName<String>())
}

Beklenen çıktı

Int
String

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 reified parçalarını eşle

Kavram Anlamı
inline Zorunlu temel
reified Tür parametresi işareti
T::class Çalışma zamanı türü
simpleName Sınıf adı

2 reified hangi anahtarla birlikte çalışmak zorundadır?

  • suspend
  • inline Doğru cevap
  • tailrec
  • operator

Açıklama: reified yalnızca inline fonksiyonlarda geçerlidir.

3 reified typeName fonksiyonunu tamamla

Soru
inline fun <____ T> typeName(): String = T::class.simpleName ?: "?"
Cevap
inline fun <reified T> typeName(): String = T::class.simpleName ?: "?"

Açıklama: reified ile T'nin çalışma zamanı türüne erişilir.

Uzman bölümündeki tüm dersler