0Pricing
Kotlin Academy · Ders

Ç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)  // true

Ek 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)  // 3

hasAnnotation 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 hasAnnotation() kullanın
  • KClass, KFunction, KProperty ve KParameter ü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çin KProperty.javaField kullanı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

  1. Kotlin Yansıması: KClass, KFunction, KProperty
  2. Özel Ek Açıklamalar Oluşturma ve Hedefleme
  3. Çalışma Zamanında Ek Açıklamaları Okuma
  4. Yansıma Tabanlı Doğrulama ve Eşleme
← Kotlin Academy Sayfasına Dön