0Pricing
Java Academy · Lekcja

Definiowanie adnotacji: elementy i wartości domyślne

Twórz własne adnotacje za pomocą @interface, definiuj elementy z wartościami domyślnymi i stosuj metadnotacje.

Definiowanie adnotacji: elementy i wartości domyślne to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.

Czym są adnotacje

Adnotacje to metadane stosowane do klas, metod, pól lub parametrów. Nie zmieniają bezpośrednio działania programu — dostarczają informacji kompilatorom, frameworkom lub procesorom działającym w czasie wykonywania.

Deklarowanie adnotacji za pomocą @interface

Użyj @interface, aby zadeklarować własną adnotację. Elementy wyglądają jak metody. Wartość domyślną określa się za pomocą default.

@interface Retry {
    int times()      default 3;
    long delayMs()   default 1000L;
    Class<? extends Throwable>[] on() default {Exception.class};
}

Stosowanie adnotacji

Zastosuj adnotację do elementu docelowego. Pomiń elementy, które mają wartości domyślne. Jeśli nazwano tylko jeden element value, można ustawić go bez podawania klucza.

@Retry(times = 5, delayMs = 500)
public void callExternalService() { ... }

// Single-element shorthand:
@interface Label { String value(); }
@Label("production")
public class App {}

Typy elementów adnotacji

Elementami mogą być wyłącznie: typy proste (int, long itd.), String, Class, typ enum, inny typ adnotacji lub jednowymiarowa tablica jednego z powyższych typów.

@interface Config {
    String   host();
    int      port()      default 8080;
    LogLevel level()     default LogLevel.INFO;  // enum
    Class<?> handler()   default DefaultHandler.class;
    String[] tags()      default {};
}

Metaadnotacje: @Retention

@Retention określa, jak długo adnotacja jest zachowywana: SOURCE (odrzucana przez kompilator), CLASS (zapisywana w pliku .class, niedostępna w czasie wykonywania), RUNTIME (odczytywalna za pomocą refleksji).

@Retention(RetentionPolicy.RUNTIME)
@interface Retry {
    int times() default 3;
}

Metaadnotacje: @Target

@Target ogranicza miejsca, w których można zastosować adnotację. Można podać wiele elementów docelowych.

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface Audited {
    String description() default "";
}

@Documented i @Inherited

@Documented umieszcza adnotację w dokumentacji Javadoc. @Inherited umożliwia podklasom dziedziczenie adnotacji po klasie bazowej (dotyczy wyłącznie adnotacji na poziomie klasy).

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

Adnotacje @Repeatable

Oznacz adnotację za pomocą @Repeatable, aby można było umieścić ją wielokrotnie na tym samym elemencie. Dostarcz adnotację kontenera przechowującą tablicę.

@Repeatable(Tags.class)
@interface Tag { String value(); }
@interface Tags { Tag[] value(); }

@Tag("fast")
@Tag("stable")
public class Service {}

Wartości domyślne i pomijanie elementów

Elementów z wartościami default nie trzeba określać w miejscu użycia. Elementy bez wartości domyślnych są wymagane.

@Retry                  // uses defaults: times=3, delayMs=1000
public void action1() {}
@Retry(times=1)         // overrides only times; delayMs stays 1000
public void action2() {}

Adnotacja a interfejs znacznikowy

Interfejsy znacznikowe (takie jak Serializable) są sprawdzane za pomocą instanceof i przekazują informacje o typie. Adnotacje są bardziej elastyczne — przenoszą metadane i mogą zawierać elementy.

Typowe wbudowane adnotacje

Warto znać adnotacje JDK: @Override, @Deprecated, @FunctionalInterface, @SuppressWarnings i @SafeVarargs.

@Override
public String toString() { return "User{" + name + "}"; }
@Deprecated(since = "2.0", forRemoval = true)
public void oldMethod() {}

Szybkie sprawdzenie

Jaka jest jedyna polityka przechowywania, która sprawia, że adnotacja jest odczytywalna w czasie wykonywania?

Podsumowanie

Deklaruj adnotacje za pomocą @interface. Użyj @Retention(RUNTIME) do przetwarzania refleksyjnego, @Target do ograniczania zastosowania, a default do określania opcjonalnych elementów. @Repeatable umożliwia wielokrotne stosowanie adnotacji.

Często zadawane pytania

Czy lekcja „Definiowanie adnotacji: elementy i wartości domyślne” jest bezpłatna?

Tak — pełny tekst „Definiowanie adnotacji: elementy i wartości domyślne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Definiowanie adnotacji: elementy i wartości domyślne”?

Twórz własne adnotacje za pomocą @interface, definiuj elementy z wartościami domyślnymi i stosuj metadnotacje. Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Java Academy?

Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Definiowanie adnotacji: elementy i wartości domyślne”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?

Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Definiowanie adnotacji: elementy i wartości domyślne
  2. Zasady retencji i typy celów
  3. Przetwarzanie adnotacji w czasie działania
  4. Procesory adnotacji w czasie kompilacji
← Powrót do Java Academy