4.Annotációk javaban Flashcards
(9 cards)
Annotáció fogalma
Programkonstrukcióra vonatkozó metaadat, melynek nincs
közvetlen hatása a programvégrehajtásra.
Gépi feldolgozásra alkalmasak, fordítási vagy futási időben elérhetőek
Dokumentációs célokat is szolgálnak
Lehetséges felhasználás (annotáció)
Információ szolgáltatás fordítónak:például tekintsen el
bizonyos figyelmeztetésektől, jelezzen bizonyos hibákat.
Kódgenerálás: pl: lombok
Futásidejű feldolgozás: Egységtesztek, prezisztencia, Http kliensek, Dependency injection, alkalmazás keretrendszer
Annotációk szintaxisa
-Egy annotáció interfész neve
-Opc: egy lista melyet vesszővel elválasztott elem-érték párok alkotnak
-Annotációt az annotáció interfész annotációjának nevezzük
Ekvivalensek:
@Target({ElementType.METHOD})
@Target(ElementType.METHOD)
Annotációk fajtái
Közönséges:
@XmlElement(name = “creator”,
namespace = “http://purl.org/dc/terms/”,
required = true)
Egyértelmű:
@SuppressWarnings(value = “unchecked”)
@SuppressWarnings(“unchecked”)
Jelölő: ha nincs megadva egyetlen elem-érték pár sem, akkor elhagyhatók a () karakterek.
@NotNull
@NotNull()
Annotáció hol alkalmazható
Deklarációkra:
nevezzük a deklaráció kontextusban
előforduló annotációkat.
-Konstruktor
-osztályváltozó
-enum konstans
-lokális változó
-metódus,
-modul
-csomag
-formális paraméter
-osztály
-interfész (beleértve az
annotáció interfészeket is)
-enum
-típusparaméter,
-rekord és rekord
-komponens (Java SE 16) deklarációjára
Típus annotációk: nevezzük a típus kontextusban előforduló annotációkat
Előre definiált annotció interfészek
Az előre definiált annotáció interfészeket kivéve a nyelvben nincs az annotációknak speciális jelentése.
Azonban az előre definiált annotáció interfészek annotációinak speciális jelentése van, mely a fordításra is hatással van.
@Deprecated
Az annotációval ellátott elem használata kerülendő, mert például
veszélyes vagy jobb alternatíva létezik helyette
@SuppressWarnings
Azt jelzi a fordító számára, hogy el kell tekinteni az annotált elemen (és a benne tartalmazott programelemeknél) az adott figyelmeztetésektől.
@Override
Azt jelzi, hogy a megjelölt metódus felülír egy olyan metódust, mely egy ősosztályban került deklarálásra. (Nem kötelező megadni de segít hibák megelőzésében)
@FunctionalInterface:
Annak jelzésére szolgál, hogy egy interfész funkcionális.
A funkcionális interfészeknek pontosan egy absztrakt metódusa van
Meta annotációk
Meta-annotációnak nevezünk egy annotáció interfész deklaráción megjelenő annotációt.
Metaadatokat szolgáltatnak az annotáció
interfészekről.
@Documented
Azt jelzi, hogy a megjelölt annotáció interfész annotációinak használata
meg kell, hogy jelenjen az API dokumentációban
@Inherited
Azt jelzi, hogy egy annotáció interfész automatikusan öröklődik
@Repeatable
A megjelölt annotáció interfész annotációi akár többször is alkalmazhatók ugyanarra a deklarációra vagy típus használatra
@Retention
Meghatározza a megjelölt annotáció interfész annotációihoz a tárolás módját, az alábbi lehetőségek választhatóak
SOURCE: a fordító figyelmen kívül hagyja az
annotációkat.
CLASS: fordító eltárolja az annotációkat a
bájtkódban, de azok futásidőben nem elérhetők.
RUNTIME: a fordító eltárolja az annotációkat a
bájtkódban és azok futásidőben is hozzáférhetők.
@Target
Meghatározza, hogy az annotáció interfész hol használható
Annotáció interfészek deklarálása
módosítók @interface name { deklarációk }
Törzsben megengedett deklarációk:
Osztály dek.
Interfész dek.
Konstans dek.
Speciális metódus dek.
A metódus deklarációkban nem megengedettek formális paraméterek,
típusparaméterek és throws kulcsszó sem.
Nem megengedettek a private, default és static módosítók.
visszatérési érték:
Primitív típus
String
Class or Class<T1, …, Tn>
enum típus
Annotáció interfész típus
Olyan tömb, mely elemeinek típusa az előzőek valamelyike
Deklaráció és típus annotációk