4.dia Annotációk a Java programozási nyelvben Flashcards
(16 cards)
Annotáció fogalma
Olyan metaadat a programkonstrukcióhoz, amelynek nincsen közvetlen kihatása a programvégrehajtásra.
Gépi feldolgozásra szolgálnak fordítási illetve akár futási időben. Használható dokumentációra is, tömör formában.
Lehetséges felhasználások
Fordításidejű feldogozás :
Például tekintsen el egy figyelmeztetéstől vagy jelezzen bizonyos hibákat.
Pl: @Depricated, @Override
Futásidejű feldolgozás :
Vannak olyan annotációk amelyekhez hozzáférhetünk végrehajtás közben is.
Kódgenerálás :
Pl: Dagger, Jakarta XML Binding, Project Lombok
Egységtesztelés: JUnit
Perzisztencia: Jackson, Jakarta Persistence, Jakarta XML Bindig, Jdbi
HTTP kliensek: Feign, Rerofit
Függőség befecskendezés: Guice, Spring Framework
Alkalmazás keretrendszerek: Micronaut Framework, Spring Framework
Annotációk szintaxisa
Részei:
AnnotációInterfészNeve(Opcionális=Lista,Kulcs=ÉrtékPárokkal)
Az annotáció interfész határozza meg, hogy milyen kulcs-érték párokat lehet megadni. Ha van alapértelmezett érték, azt nem kötelező megadni. Ezeknek a sorrendje nem számít.
Ha egy elem lista, akkor Annot(Opc={Lista,Igy.Kell})
Annotációk fajtái
Közönséges annotáció:
Több kulcs-érték párból áll.
Egyelemű annotáció:
Egy kulcs-érték párból áll.
Jelölő annotáció:
Nincsen kulcs-érték pár.
(Elhagyható a zárójel.)
Hol alkalmazható annotáció?
-Deklarációkra (Deklaráció annotáció):
Konstruktor, metódus, osztályváltozó, lokális változó, formális paramtére, típusparaméter, osztály, interfész (akár annotációs interfészek), enum, enum konstans, rekord, rekord komponens, modul, csomag.
-Deklarációkban és kifejezésekben használt típusokra (Típus annotáció)
@Deprecated (Előre definiált annotáció interfészek)
Az annotációval ellátott elem használata kerülendő, lehet veszélyes vagy létezik jobb alternatíva.
(Javadocban is érdemes jelezni @depricated)
Következmény: Figyelmeztet amikor ezt az elemet akarjuk használni.
Két eleme van:
since : Melyik verzióban lett elavult. (string)
forRemoval : elem jövőben törlésre fog kerülni. (bool)
@SuppressWarnings (Előre definiált annotáció interfészek)
Az adott elem és a benne lévő programelemek által adott figyelmeztetéseket ne vegyen figyelembe.
@Override (Előre definiált annotáció interfészek)
A megjelőlt metódus felülír egy ősosztályban deklarált metódust.
Nem kötelező megadni, de ajánlott a hibák (elírások) elkerülése szempontjából.
@FunctionalInterface (Előre definiált annotáció interfészek)
Funkcionális interfészt jelez, amelynek pontosan egy absztrakt metódusa van.
@Documented (Meta-annotációk)
Az általa jelölt annotáció interfész annotációinak használata meg kell, hogy jelenjen az API dokumentációjában. (Ez alapértelmezetten nem történik meg.)
@Inherited (Meta-annotációk)
Azt jelzi, hogy egy annotáció intefész automatikusan öröklődik. (Alapértelmezetten ilyen nincs.)
@Repeatable (Meta-annotációk)
Az annotócói interfész akár többször is használható ugyan azon a deklaráción vagy típusok.
@Retention (Meta-annotációk)
A megjelölt annotáció interfész annotáióhoz határoz meg tárolási módot.
Lehet
RetentionPolicy.SOURCE: a fordító figyelmen kívül hagyja az annotációt.
RetentionPolicy.CLASS: a fordító eltárolja az annotációkat a bájtkódban, de azokat futásidőben nem lehet elérni.
RetentionPolicy.RUNTIME: a fordító a bájtkódban eltárolja az annotációt, és azt el lehet érni futásidőben.
@Target (Meta-annotációk)
Mgehatározza hogy az annotáció interfész annotációja (milyen deklarációnál) hol használható.
ElementType.ANNOTATION_TYPE : Annotáció intefész
ElementType.CONSTRUCTOR : Konstruktor
ElementType.METHOD : Metódus
ElementType.FIELD : Osztályváltozó, enum konstans
ElementType.LOCAL_VARIABLE : Lokális változó
ElementType.PARAMETER : Formális paraméter
ElementType.TYPE_PARAMETER : Típusparaméter
ElementType.TYPE : Osztály, interfész, enum, rekord
ElementType.TYPE_USE : Típus
ElementType.RECORDE_COMPONENT : Rekord komponens
ElementType.MODULE : Modul
ElementType.PACKAGE : Csomag
Annotáció interfészek deklarálása
módosítók @interface név { deklarációk }
Egy speciális interfészt határoz meg. Nem lehetnek generikusak és nem lehet szülőinterfészük, mindegyik szuper-interfésze a java.lang.annotation.Annotation közönséges interfész.
Törzsében lehet:
Osztály-, (annotation) interfész-, konstans- és speciális metódus deklarációk.
Speciális metódus fog jelenteni egy elemet. Nem lehetnek formális paraméterei, típusparaméterei es throws kulcsszót sem tartalmazhat. Nem lehet ezen túl privát, default és static. Visszatérési értéke megadja az elem típusát:
Primitívek, String, Class vagy Class<T1,..,Tn>, enum, annotációs interfész, ezekből tömb. A ‘default’ kulcsszóval alapértelmezett értéket lehet hozzáadni.
Deklaráció és típus annotációk
Az annotáció interfész deklaráció határozza meg, hogy melyik.