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:
- 4 dintre ele sunt din pachetul java.lang.annotation: @Retention, @Documented, @Target și @Inherited. Această meta-adnotată.
- 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.