Java Academy · Ders

Saklama İlkeleri ve Hedef Türleri

SOURCE, CLASS veya RUNTIME saklama türlerinden birini seçin ve @Target ile hedef öğeleri kısıtlayın.

2. ders / 413 adım

Saklama İlkeleri ve Hedef Türleri, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Üç Saklama Politikası

SOURCE: derleyici tarafından atılır (yalnızca APT için yararlıdır). CLASS: .class dosyalarına yazılır, çalışma zamanında kullanılamaz. RUNTIME: yansıtma yoluyla kullanılabilir. Çoğu çatı anotasyonu RUNTIME kullanır.

SOURCE Saklama: Yalnızca Derleme Zamanı

SOURCE anotasyonları anotasyon işlemcileri tarafından işlenir ve ardından atılır. @Override ve @SuppressWarnings SOURCE türündedir; derleyiciye bilgi verirler ancak .class dosyasında bulunmazlar.

@Retention(RetentionPolicy.SOURCE)
public @interface GenerateBuilder {}
// APT generates a Builder class when it sees @GenerateBuilder
// The annotation itself disappears from the compiled output

CLASS Saklama: Bayt Kodu Analizi

CLASS anotasyonları bayt kodu analizi araçlarının (PMD, FindBugs, ASM) kullanabilmesi için .class dosyalarına dahil edilir; ancak çalışma zamanında yansıtma yoluyla okunamaz.

@Retention(RetentionPolicy.CLASS)
public @interface ThreadSafe {}
// Visible in bytecode, invisible to Class.getAnnotation() at runtime

RUNTIME Saklama: Yansıtma Tabanlı İşleme

RUNTIME anotasyonları çalışma zamanına kadar korunur ve getAnnotation() ile okunabilir. Spring, JUnit, Jackson ve Hibernate, RUNTIME saklamasını kullanır.

@Retention(RetentionPolicy.RUNTIME)
public @interface Route {
    String path();
    String method() default "GET";
}
// At runtime:
Route r = handler.getClass().getMethod("handle").getAnnotation(Route.class);
System.out.println(r.path()); // e.g. "/users"

@Target: Uygulama Noktalarını Sınırlama

@Target, anotasyonun nerede görünebileceğini sınırlamak için ElementType sabitlerini kullanır. İzin verilmeyen bir öğeye uygulanırsa derleme zamanında hata oluşur.

import static java.lang.annotation.ElementType.*;
@Target({METHOD, CONSTRUCTOR})
@Retention(RetentionPolicy.RUNTIME)
public @interface Measured {}

Tüm ElementType Değerleri

Tam liste: TYPE (sınıf/arayüz/numaralandırma), FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE, TYPE_PARAMETER (genel tür parametresi), TYPE_USE (herhangi bir tür kullanımı).

// TYPE_USE: annotate any type reference
@NotNull String name;
List<@NonNull String> items;
public @Valid User createUser(@NotNull String name) { ... }

TYPE ve TYPE_USE Arasındaki Fark

TYPE, sınıf/arayüz/numaralandırma tanımlarını hedefler. TYPE_USE (Java 8 ve sonrası), genel türler, dönüştürmeler ve extends yan tümceleri dahil olmak üzere bir türün her türlü kullanımını hedefler; böylece tür düzeyinde null güvenliği anotasyonları kullanılabilir.

@Target(ElementType.TYPE_USE)
@interface NonNull {}
// Can be applied to:
List<@NonNull String> list;
@NonNull String result = (@NonNull String) obj;

Target ve Retention'ı Birleştirme

En kullanışlı çatı anotasyonları, RUNTIME saklamasını belirli hedeflerle birleştirir. Örneğin, yalnızca alanlara uygulanan bir doğrulama anotasyonu.

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Range {
    int min() default 0;
    int max() default Integer.MAX_VALUE;
}

@Inherited ile Anotasyonları Devralma

@Inherited, sınıf düzeyindeki anotasyonların alt sınıflara devralınmasını sağlayan bir meta anotasyondur. Yöntem veya alan anotasyonları üzerinde hiçbir etkisi yoktur.

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Framework {}
@Framework class Base {}
class Child extends Base {} // @Framework visible on Child too

@Documented: Javadoc'a Dahil Etme

Anotasyonlu öğeler için oluşturulan Javadoc'ta anotasyonun görünmesi amacıyla @Documented uygulayın. Bu olmadan anotasyonlar API belgelerinde görünmez.

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Auditable {
    String description() default "";
}

Saklama Bilgilerini Çalışma Zamanında Okuma

Bir anotasyon türünün kendisinin saklama bilgisini, anotasyon sınıfı nesnesi üzerinde getAnnotation(Retention.class) kullanarak inceleyebilirsiniz.

Retention r = Retry.class.getAnnotation(Retention.class);
System.out.println(r.value()); // RUNTIME, CLASS, or SOURCE

Kısa Kontrol

Sınıf, arayüz ve numaralandırma tanımlarını hangi ElementType kapsar?

Özet

Derleme zamanı araçları için SOURCE, bayt kodu analizi için CLASS, yansıtma tabanlı çatılar için RUNTIME kullanın. Hatalı kullanımı önlemek için @Target ile sınırlayın. API anotasyonları için @Documented, sınıf hiyerarşisi anotasyonları için @Inherited ekleyin.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Java öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
104
Dersler
374

Sıkça Sorulan Sorular

“Saklama İlkeleri ve Hedef Türleri” dersi ücretsiz mi?

Evet — “Saklama İlkeleri ve Hedef Türleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“Saklama İlkeleri ve Hedef Türleri” dersinde ne öğreneceğim?

SOURCE, CLASS veya RUNTIME saklama türlerinden birini seçin ve @Target ile hedef öğeleri kısıtlayın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Saklama İlkeleri ve Hedef Türleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Ek Açıklamaları Tanımlama: Öğeler ve Varsayılanlar
  2. Saklama İlkeleri ve Hedef Türleri
  3. Çalışma Zamanında Ek Açıklama İşleme
  4. Derleme Zamanı Ek Açıklama İşleyicileri
← Java Academy Sayfasına Dön