Çalışma Zamanında Ek Açıklamaları Okuma
Kotlin yansımasını kullanarak bildirimlerden ek açıklama örneklerini alın.
Çalışma Zamanında Ek Açıklamaları Okuma, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 3. 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.
Ön Koşullar
Ek açıklamaları çalışma zamanında okumak için şunlar gerekir: (1) @Retention(RUNTIME) ile bildirilmiş ek açıklama, (2) sınıf yolunda kotlin-reflect bağımlılığı ve (3) ek açıklama eklenmiş öğeye ait bir KClass, KFunction veya KProperty başvurusu.
KClass'tan Ek Açıklamaları Okuma
Bir sınıftaki tüm ek açıklamaları almak için KClass üzerinde annotations işlevini çağırın veya belirli bir tür için findAnnotation kullanın:
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.CLASS)
annotation class Table(val name: String)
@Table(name = "users")
class UserEntity
val ann = UserEntity::class.findAnnotation<Table>()
println(ann?.name) // "users"Özelliklerden Ek Açıklamaları Okuma
Özelliklerdeki ek açıklamalara KProperty.annotations veya findAnnotation aracılığıyla erişin:
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY)
annotation class Column(val name: String)
data class User(@Column("user_name") val name: String)
val prop = User::name
val col = prop.findAnnotation<Column>()
println(col?.name) // "user_name"İşlevlerden Ek Açıklamaları Okuma
İşlevlerdeki ek açıklamaları okumak için KFunction.findAnnotation kullanın:
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION)
annotation class Transactional
class UserService {
@Transactional
fun save(user: User) { /*...*/ }
}
val fn = UserService::save
val isTx = fn.hasAnnotation<Transactional>()
println(isTx) // trueEk Açıklamalar için Tüm Özellikleri Dolaşma
Yaygın bir yaklaşım, bir sınıfın bildirilmiş tüm özelliklerini taramak ve belirli bir ek açıklamayla işaretlenmiş olanları toplamaktır:
fun <A : Annotation> KClass<*>.annotatedProperties(
annotationClass: KClass<A>
): List<Pair<KProperty1<*, *>, A>> =
declaredMemberProperties
.mapNotNull { prop ->
prop.findAnnotation(annotationClass)?.let { ann -> prop to ann }
}Parametrelerdeki Ek Açıklamaları Okuma
Kurucu parametrelerindeki ek açıklamalara KFunction.parameters aracılığıyla erişin:
class Repo(
@param:Validate(minLength = 3) val name: String
)
val ctor = Repo::class.primaryConstructor!!
val param = ctor.parameters.first()
val ann = param.findAnnotation<Validate>()
println(ann?.minLength) // 3hasAnnotation ve findAnnotation Karşılaştırması
Bir boole denetimi için hasAnnotation kullanın; ek açıklamanın özellik değerlerine ihtiyaç duyduğunuzda findAnnotation kullanın. Her ikisi de kotlin.reflect.full içindeki uzantı işlevleridir.
Sınıf Hiyerarşisinde İlerleme
Üst sınıflardaki veya arayüzlerdeki ek açıklamalar, Kotlin yansımasında NOT otomatik olarak devralınır. Devralınan ek açıklamalara ihtiyacınız varsa KClass.superclasses üzerinde ilerlemeli veya KClass.allSuperclasses kullanmalısınız.
fun KClass<*>.findAnnotationRecursive(ann: KClass<out Annotation>) =
generateSequence(this) { null } // simplified — real impl walks supers
.flatMap { it.annotations }
.firstOrNull { it.annotationClass == ann }Performans
Yansıma çağrıları yavaştır. Bir çatı başlangıcında ek açıklamaları tarıyorsanız sonuçları KClass anahtarını kullanan bir haritada önbelleğe alın. Ek açıklamaları istek başına veya kare başına sık çalıştırılan yollarda asla okumayın.
Kullanım Yeri Hedefleri ve JVM Alanları
@field: hedefli özellik ek açıklamalarında ek açıklama, JVM yedekleme alanında bulunur. Buna Java yansıması aracılığıyla (KProperty.javaField?.annotations) erişin; yalnızca Kotlin bildirim yerini kapsayan Kotlin annotations listesini kullanmayın.
Uygulamalı Örnek: Basit ORM Eşleyicisi
Küçük bir ORM eşleyicisi, bir SQL sütun listesi oluşturmak için @Column ek açıklamalarını okur:
fun columns(klass: KClass<*>): String =
klass.declaredMemberProperties
.mapNotNull { it.findAnnotation<Column>()?.name }
.joinToString(", ")
println(columns(User::class)) // "user_name, email"Hızlı Kontrol
Bir KClass içinden MyAnn türündeki belirli bir ek açıklamayı nasıl okursunuz?
Özet: Çalışma Zamanında Ek Açıklamaları Okuma
Temel çıkarımlar:
- Ek açıklamada
@Retention(RUNTIME)bulunmalıdır - Ek açıklamanın değerini almak için
findAnnotation, boole denetimi için() hasAnnotationkullanın() KClass,KFunction,KPropertyveKParameterüzerinde çalışır- İstek başına ek yükten kaçınmak için tarama sonuçlarını başlangıçta önbelleğe alın
@field:ek açıklamaları içinKProperty.javaFieldkullanın
Sıkça Sorulan Sorular
“Çalışma Zamanında Ek Açıklamaları Okuma” dersi ücretsiz mi?
Evet — “Çalışma Zamanında Ek Açıklamaları Okuma” 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.
“Çalışma Zamanında Ek Açıklamaları Okuma” dersinde ne öğreneceğim?
Kotlin yansımasını kullanarak bildirimlerden ek açıklama örneklerini alı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 3. dersidir.
“Çalışma Zamanında Ek Açıklamaları Okuma” 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
- Kotlin Yansıması: KClass, KFunction, KProperty
- Özel Ek Açıklamalar Oluşturma ve Hedefleme
- Çalışma Zamanında Ek Açıklamaları Okuma
- Yansıma Tabanlı Doğrulama ve Eşleme