Java анотации, coreer
Java анотации - това е един от основните инструменти на мета-програмиране в Java език (различен intrument -parametriziruemye класове (= модел = Generics).
могат да се използват анотации:
- компилатор - да Rowan диагностични грешки или потискане предупреждения за етап прекомпилирате.
- събира и разполагане - за генериране на кода, CML и други ресурси.
- по време на работа - за извършване на отразяващ адаптиране на приложения.
Пояснения започват със символа @, което означава, AT = Тип Анотация. Опциите може да се има в тях;
Стойностите са също записи в кратък:
Също така, анотации могат да бъдат не ценности (тези анотации се наричат маркери):
Има стандарт (вградени) анотация, можете да създадете своя собствена.
7 вградени пояснения:
- 4 от тях са от java.lang.annotation пакет: @Retention, @Documented, @Target и @Inherited. Този мета-анотация.
- 3 на пакет java.lang: @Override, @deprecated и @SuppressWarnings
@Override - поставен преди метода, който ние претовари родителския клас. Ако сме допуснали грешка в името, параметри или връщане тип (т.е. нов метод, не е точно същото, както майка), компилаторът ще ви предупреди за това
// отхвърлена метод, който използва непроверени Generics
Сега ние дам един пример за персонализирани анотации
За да създадете пояснение, че е необходимо да се опише анотация интерфейс.
Prezhche можете да го направите, е необходимо да се напомни, че има matadannye метаданни (анотации за анотация), те се наричат мета-анотации (вид мета-анотация). Най-честата мета-анотация на задържане, което позволява на компилатора да се знае какъв етап derazht анотация:
- RetentionPolicy.SOURCE - анотация се използва по време на компилация и трябва да бъде отхвърлена от съставителя;
- RetentionPolicy.CLASS - anntoatsiya ще бъде записано в компилатора клас-файл, но няма да получите в приложение за работа (по време на работа). Тази стойност yavletsya по подразбиране, ако не укажете в тази анотация;
- RetentionPolicy.RUNTIME - абстрактен ще бъдат записани в клас-файл и на разположение по време на изпълнение чрез отражение.
анотация параметри могат да бъдат само прости видове, изброени и String клас.
И тук е един пример:
Анотации могат да посочат, където те могат да бъдат използвани. Това е мета-анотация @Target а, които могат да имат следните стойности:
- java.lang.annotation.ElementType.ANNOTATION_TYPE - обяви Анотиране мета-анотация (може да се използва само в близост до @interface)
- java.lang.annotation.ElementType.CONSTRUCTOR - важи само за kontruktoram.
- java.lang.annotation.ElementType.FIELD - важи само за областта на класове, включително трансфери към константа (ENUM).
- java.lang.annotation.ElementType.LOCAL_VARIABLE - primima само за променливи в тялото на метода.
- java.lang.annotation.ElementType.METHOD - се отнася само до методи.
- java.lang.annotation.ElementType.PACKAGE - важи само за реклама пакета.
- java.lang.annotation.ElementType.PARAMETER - важи само за параметрите на метода.
- java.lang.annotation.ElementType.TYPE - за класове; интерфейси, включително определяне поясненията бройки (ENUM).
Но примерът се отнася за този мета-анотация в самата тази annoatatsii декларацията :)
Използването на мета-анотации @Inherited. Този мета-анотация позволява unasledyvat анотации суперкласа на неговите подкласове. например:
Клас подклас ще бъде отбелязан @ForEveryone, не @JustForMe.
Използването на мета-анотации @Documented. Анотации са отбелязани така popodaet в документацията, генерирани от Javadoc полезност:
Разбира се, трябва да се отбележи използването на анотации за генериране на код. Той често се използва рамки, които са готови да общуват с класовете по поръчка да им предоставят определена функционална, и разбира се те neizvesno за по-рано, че ще бъде за класове. Алтернатива на тези класове са annotarivaniya ХМЛ описания, но аз не бих казал, че udlobnee. Ето един пример за EJB 3.0:
Този код се компилира и deploitsya в EJB 3.0 среда, която вече се изпълнява, така и на етапа на изпълнение на тези пояснения, за novoprodeploennogo клас ги прочете и да се създаде ORM-обект.