Retention ve Target
- Java kursu
- İleri seviye
- Ders 33/82
- 5 dk
@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
// Log annotation'ını tanımla
// Retention ve Target ekle
// main içinde ekrana 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 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
@Retention(RetentionPolicy.____)
@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 |