Java анотации, coreer

Java анотации - това е един от основните инструменти на мета-програмиране в Java език (различен intrument -parametriziruemye класове (= модел = Generics).

могат да се използват анотации:

  • компилатор - да Rowan диагностични грешки или потискане предупреждения за етап прекомпилирате.
  • събира и разполагане - за генериране на кода, CML и други ресурси.
  • по време на работа - за извършване на отразяващ адаптиране на приложения.

Пояснения започват със символа @, което означава, AT = Тип Анотация. Опциите може да се има в тях;

Стойностите са също записи в кратък:

Също така, анотации могат да бъдат не ценности (тези анотации се наричат ​​маркери):

Има стандарт (вградени) анотация, можете да създадете своя собствена.
7 вградени пояснения:

  1. 4 от тях са от java.lang.annotation пакет: @Retention, @Documented, @Target и @Inherited. Този мета-анотация.
  2. 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-обект.