CodeBlanks Logo Icon CodeBlanks

Annotations

Annotation'ları reflection ile okumayı öğrenirsin.

Annotations ve okuma

Bir annotation, koda meta veri ekler. @Target ile nereye konabileceği belirtilir. Reflection ile annotation'lar okunabilir.

Örnek: @Target(AnnotationTarget.PROPERTY) annotation class Label. Bir özelliğe @Label koyulur. prop.annotations ile annotation listesi alınır; prop.findAnnotation<Label>() ile belirli bir annotation bulunur. Bu kalıp, çalışma zamanında meta veriye dayalı dallanma yapar.

findAnnotation ile arama

findAnnotation<T>(), bir öğe üzerinde belirli bir annotation'ı arar. Bulursa annotation'ı, bulamazsa null döndürür.

Örnek: val label = prop.findAnnotation<Label>(). Eğer prop üzerinde @Label varsa label null değil; yoksa null olur. Bu kalıp, annotation varlığına göre dallanma yapmanın temiz bir yoludur.

Uygulama Label annotation'ını tanımla ve oku

@Target(AnnotationTarget.PROPERTY) annotation class Label tanımla. class Item(@Label val name: String) sınıfı yaz. main içinde val prop = Item::name referansını al ve println(prop.annotations.any { it is Label }) çağrısını ekle.

Başlangıç kodu

Main.kt
// Label annotation: PROPERTY hedefli
// Item sınıfı: name özelliğinde @Label
// main'de prop al, annotations ile Label ara ve yazdır

Örnek çözüm

Main.kt
@Target(AnnotationTarget.PROPERTY)
annotation class Label

class Item(@Label val name: String)

fun main() {
    val prop = Item::name
    println(prop.annotations.any { it is Label })
}

Beklenen çıktı

true

Soru ve cevaplar

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

1 annotation class tanımını tamamla

Soru
____ class Label
Cevap
annotation class Label

Açıklama: annotation class Label bir annotation tanımlar.

2 Annotation parçalarını eşle

Kavram Anlamı
@Target(...) Yer belirleme
annotation class Tanım
@Label Kullanım
findAnnotation<Label>() Arama

3 Bir özellik üzerindeki annotation'ları okumak için hangi özellik kullanılır?

  • .methods
  • .fields
  • .constructors
  • .annotations Doğru cevap

Açıklama: annotations annotation listesini verir.

İleri seviye bölümündeki tüm dersler