reified
- Kotlin kursu
- Uzman
- Ders 3/47
- 5 dk
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
// reified ekle
inline fun <T> typeName(): String = TODO()
fun main() {
// Int ve String tür adlarını yazdır
}Örnek çözüm
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
inline fun <____ T> typeName(): String = T::class.simpleName ?: "?"
inline fun <reified T> typeName(): String = T::class.simpleName ?: "?"
Açıklama: reified ile T'nin çalışma zamanı türüne erişilir.