CodeBlanks Logo Icon CodeBlanks

Reflection ile annotation

Reflection ile annotation okumayı öğrenirsin.

getAnnotation ile annotation okuma

Çalışma anında bir annotation'ı okumak için Class nesnesinin getAnnotation yöntemi kullanılır. Bu, yalnızca RUNTIME retention'a sahip annotation'lar için çalışır.

Örnek: Note n = Sample.class.getAnnotation(Note.class). Daha sonra n.value() ile öğesine erişilir. Annotation yoksa null döner; bu yüzden önce isAnnotationPresent(Note.class) ile varlığını denetlemek güvenlidir. Bu mekanizma, çerçevelerin sınıfları otomatik olarak keşfetmesini sağlar.

isAnnotationPresent ile güvenli denetim

isAnnotationPresent bir annotation'ın varlığını boolean olarak döndürür. getAnnotation çağrısından önce kullanmak, null denetimi yapmadan güvenli erişim sağlar.

Örnek: if (c.isAnnotationPresent(Note.class)) { ... }. Bu örüntü, özellikle çerçevelerde yaygındır: bir sınıfın belirli bir annotation'a sahip olup olmadığına bakarak davranış değiştirilir. Birden çok annotation türünü denetlemek için her biri için ayrı çağrı yapılır.

Uygulama Note annotation'ını reflection ile oku

Bir @interface Note tanımla: String value(). Üstüne @Retention(RetentionPolicy.RUNTIME) ve @Target(ElementType.TYPE) ekle. Sample sınıfına @Note("merhaba") ver. main içinde getAnnotation ile değeri alıp System.out.println ile yazdır.

Başlangıç kodu

Main.java
// Note annotation'ını tanımla (RUNTIME, TYPE)
// Sample sınıfına Note uygula
// main içinde değeri al ve yazdır

Örnek çözüm

Main.java
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Note { String value(); }

@Note("merhaba")
class Sample { }

public class NoteReader {
    public static void main(String[] args) {
        Note n = Sample.class.getAnnotation(Note.class);
        System.out.println(n.value());
    }
}

Beklenen çıktı

merhaba

Soru ve cevaplar

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

1 Reflection yöntemlerini eşleştir

Kavram Anlamı
getAnnotation Tek annotation döndürür
isAnnotationPresent Varlık denetimi
getAnnotations Tüm annotation dizisi
value() Öğeye erişim

2 getAnnotation çağrısını tamamla

Soru
Note n = Sample.class.getAnnotation(____.class);
Cevap
Note n = Sample.class.getAnnotation(Note.class);

Açıklama: Annotation sınıfı nesnesi parametre olarak verilir.

3 getAnnotation annotation yoksa ne döndürür?

  • Boş bir dizi
  • false
  • null Doğru cevap
  • IllegalAccessException fırlatır

Açıklama: Yoksa null döner; bu yüzden denetlemek güvenlidir.

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