adnotări Java, coreer

adnotări Java - aceasta este una dintre principalele instrumente ale meta-programare în limbajul Java (alt intrument -parametriziruemye clase (= model = Generice).

Adnotările pot fi utilizate:

  • compilator - pentru a Rowan erori de diagnostic sau de a suprima avertismentele de pe scena recompilare.
  • compila și implementa - pentru a genera codul, CML și alte resurse.
  • rulare - pentru a efectua adaptarea reflexivă a aplicațiilor.

Adnotările începe cu simbolul @, ceea ce înseamnă că AT = Tip Annotation. Opțiunile pot fi în ele:

Valorile sunt, de asemenea, înregistrări pe scurt:

De asemenea, adnotările pot exista valori (astfel de adnotări sunt numite markeri):

Există standard de adnotare (built-in), puteți crea propriul.
7 built-in adnotări:

  1. 4 dintre ele sunt din pachetul java.lang.annotation: @Retention, @Documented, @Target și @Inherited. Această meta-adnotată.
  2. 3 pachetului java.lang: @ Suprascriere, @Deprecated și @SuppressWarnings

@ Suprascriere - plasate înainte de metoda pe care le supraîncărca clasa părinte. Dacă am făcut o greșeală în numele, parametrii sau returului tip (de exemplu, o metodă nouă, nu exact la fel ca părinte), compilatorul vă va avertiza despre acest lucru

// metoda depreciată care utilizează Generice nebifate

Acum vom da un exemplu de adnotări personalizate
Pentru a crea o adnotare este necesară pentru a descrie interfața adnotată.
Prezhche o faci, este necesar să se reamintească faptul că există metadate matadannye (adnotări pentru adnotare), acestea sunt numite meta-adnotări (de tip meta-adnotare). Cele mai frecvente de retenție meta-adnotare, care permite compilatorul sa stie adnotare ce stadiu derazht:

  • RetentionPolicy.SOURCE - adnotare este utilizat la momentul compilarii și trebuie să fie respins de compilator;
  • RetentionPolicy.CLASS - anntoatsiya vor fi înregistrate în compilator de clasă fișier, dar nu va primi într-o aplicație care rulează (execuție). Această valoare yavletsya la implicit, dacă nu se specifică în mod explicit această adnotare;
  • RetentionPolicy.RUNTIME - abstracte vor fi scrise în clasa-fișier și este disponibil în timpul rulării prin reflecție.

Parametrii de adnotare poate fi doar tipuri simple, enumerate și clasa String.
Și aici este un exemplu:

Adnotările pot indica în cazul în care acestea pot fi utilizate. Aceasta este o @Target meta-adnotare, care poate avea următoarele valori:

  • java.lang.annotation.ElementType.ANNOTATION_TYPE - anunta Adnotați meta-adnotare (poate fi utilizat numai în apropierea @interface)
  • java.lang.annotation.ElementType.CONSTRUCTOR - se aplică numai kontruktoram.
  • java.lang.annotation.ElementType.FIELD - se aplică numai domeniile de clase, inclusiv transferurile de la constanta (enum).
  • java.lang.annotation.ElementType.LOCAL_VARIABLE - primima numai variabile în interiorul metodelor.
  • java.lang.annotation.ElementType.METHOD - se aplică numai metode.
  • java.lang.annotation.ElementType.PACKAGE - se aplică numai pentru pachetul de publicitate.
  • java.lang.annotation.ElementType.PARAMETER - se aplică numai la parametrii metodei.
  • java.lang.annotation.ElementType.TYPE - aplicabile claselor; interfețe, inclusiv definirea enumerările adnotări (ENUM).

Dar exemplul se aplică acestei meta-adnotare în declarația de sine acest annoatatsii :)

Utilizarea meta-adnotări @Inherited. Această meta-adnotare permite adnotări unasledyvat superclasa ale subclaselor sale. exemplu:

Clasa Subclasa va fi adnotate @ForEveryone, nu @JustForMe.

Utilizarea meta-adnotări @Documented. Adnotările sunt marcate astfel popodaet în documentația generată de utilitate javadoc:

Desigur, este de remarcat utilizarea de adnotări pentru generarea de cod. Este folosit de multe ori cadrele care sunt gata să comunice cu clasele personalizate pentru a le oferi o anumită funcțională, și desigur neizvesno pentru mai devreme că va fi pentru clase. O alternativă la aceste clase sunt annotarivaniya LGC-descriptori, dar nu aș spune că udlobnee. Aici este un exemplu pentru EJB 3.0:

Acest cod compilează și deploitsya în EJB 3.0 mediu, care este deja în execuție, iar în etapa de execuție a acestor adnotări novoprodeploennogo clasa a le citi și de a crea ORM-obiect.