CodeBlanks Logo Icon CodeBlanks

Retention ve Target

@Retention ve @Target meta-annotation'ları öğrenirsin.

@Retention ile yaşam süresi

@Retention meta-annotation'ı, bir annotation'ın ne kadar süreyle korunacağını belirler. Üç değer alır: SOURCE yalnızca kaynak kodda kalır (derleyici atar); CLASS sınıf dosyasına yazılır ama çalışma anında erişilemez (öntanımlı); RUNTIME çalışma anında reflection ile okunabilir.

Örnek: @Retention(RetentionPolicy.RUNTIME). Eğer annotation'ını reflection ile okumak istiyorsan mutlaka RUNTIME seçmelisin; aksi halde çalışma anında kaybolur.

@Target ile kullanım yeri

@Target meta-annotation'ı, annotation'ın hangi öğelere uygulanabileceğini kısıtlar. Değerleri ElementType numaralandırmasından gelir: TYPE sınıf/arayüz, METHOD yöntem, FIELD alan, PARAMETER parametre.

Örnek: @Target(ElementType.METHOD) yalnızca yöntemlere izin verir. Bir annotation'ı yanlış yere koyarsan derleyici hata verir. Birden çok yer vermek için dizi kullanılır: @Target({ElementType.TYPE, ElementType.METHOD}).

Uygulama Log annotation'ına retention ve target ver

Bir @interface Log tanımla. Üstüne @Retention(RetentionPolicy.RUNTIME) ve @Target(ElementType.TYPE) ekle. main içinde System.out.println ile Log tanimlandi yazdır.

Başlangıç kodu

Main.java
// Log annotation'ını tanımla
// Retention ve Target ekle
// main içinde ekrana 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 Log { }

public class LogDemo {
    public static void main(String[] args) {
        System.out.println("Log tanimlandi");
    }
}

Beklenen çıktı

Log tanimlandi

Soru ve cevaplar

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

1 Retention değerini tamamla

Soru
@Retention(RetentionPolicy.____)
Cevap
@Retention(RetentionPolicy.RUNTIME)

Açıklama: RUNTIME, annotation'ı çalışma anında okunabilir kılar.

2 Bir annotation'ı reflection ile çalışma anında okumak için hangi retention gerekir?

  • RetentionPolicy.RUNTIME Doğru cevap
  • RetentionPolicy.SOURCE
  • RetentionPolicy.CLASS
  • ElementType.TYPE

Açıklama: RUNTIME annotation'lar reflection ile okunur; SOURCE derleyicide kaybolur.

3 Retention değerlerini eşleştir

Kavram Anlamı
SOURCE Yalnızca kaynak kod
CLASS Sınıf dosyası (öntanımlı)
RUNTIME Çalışma anı
FIELD ElementType değeri

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