Reflection ile annotation
- Java kursu
- İleri seviye
- Ders 35/82
- 5 dk
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
// 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
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
Note n = Sample.class.getAnnotation(____.class);
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.