Adnotacje z czym to się je?

0

Dobry wieczór,
Dziś uczę się nowej rzeczy w świecie Javy. Tą rzeczą są adnotacje. Dowiedziałem się, że stosuję się w celu dod. informacji dla kompilatora, przetwarzane w trakcie kompilowania, uruchomienia programu.

Zadaniem podsumowania było napisanie pewnej adnotacji @MyDocumention przyjmującej elementy author oraz comment. I było trzeba odczytać adnotację w trakcie działania programu. Ale po co w ogóle pisać np. kto jest autorem metody itd. Druga sprawa adnotacja @Override. Jak ona jest zbudowana, że sprawdza czy dana metoda przesłoniła metodę w nadklasie? W kursie było coś takiego:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

Ale wydaję mi się, że jest to niepełna definicja tej adnotacji, bo niby jak kompilatorek ma sprawdzać przesłonięcie metod? Tak samo w przypadku adnotacji @SuppressWarnings. Przekazujemy element "unchecked" i ot kompilator już nie daje powiadomień o "zagrożeniach". Przecież on nam nie czyta w myślach... Dziękuję za wyjaśnienie.

0

Równie dobrze mógłbyś napisać "co z tego że damy extends class, przecież kompilator nie czyta w myślach"...
Przecież adnotacje to standardowy mechanizm Javy więc Twoje zdziwienie nie ma żadnego sensu

0

Każda adnotacja oprócz deklaracji (ten kod z @interface) - (która faktycznie jest tylko markerem - sama nic nie robi) - musi mieć gdzieś zakodowaną interpretację.
@ Override, @ SuppressWarnings - są zakodowane w kodzie kompilatora javy - na stałe.
Wiele innych annotacji jest zakodowanych w "pluginach" do kompilatora (np. Lombok).
(czyli znowuż na podstawi e tych adnotacji kompilator wygeneruje trochę inny bajtkod aplikacji, albo rzuci błędami / ostrzeżeniami -
przy czym to zachowanie jest zakodowane w kompilatorze / pluginie.
Najwięcej adnotacji jest interpretowanych przez (tfu...) kontenery w czasie działania programu (dzięki tzw. refleksji) @Inject, @Transactional.... (Tomcat, Sring, Servery JavaEE) - i to ostanie to przekleństwo z którym walczę :-).

0
jarekr000000 napisał(a):

Każda adnotacja oprócz deklaracji (ten kod z @interface) - (która faktycznie jest tylko markerem - sama nic nie robi) - musi mieć gdzieś zakodowaną interpretację.
@ Override, @ SuppressWarnings - są zakodowane w kodzie kompilatora javy - na stałe.
Wiele innych annotacji jest zakodowanych w "pluginach" do kompilatora (np. Lombok).
(czyli znowuż na podstawi e tych adnotacji kompilator wygeneruje trochę inny bajtkod aplikacji, albo rzuci błędami / ostrzeżeniami -
przy czym to zachowanie jest zakodowane w kompilatorze / pluginie.
Najwięcej adnotacji jest interpretowanych przez (tfu...) kontenery w czasie działania programu (dzięki tzw. refleksji) @Inject, @Transactional.... (Tomcat, Sring, Servery JavaEE) - i to ostanie to przekleństwo z którym walczę :-).

O to chodzilo tak myslalem, dzieki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1