JAVA Аннотации

Встроенные аннотации

В Java определено много полезных встроенных аннотаций, большинство из их являются специализированными. Аннотации, что имеют общее назначение:
  • @Retention - эта аннотация предназначена для применения только в качестве аннотации к другим аннотациям. Определяет политику удержания.
  • @Documented - это маркер-интерфейс, который сообщает инструменту, что аннотация должна быть документирована.
  • @Target - эта аннотация задает тип объявления, к которым может быть применима аннотация. Принимает один аргумент, который должен быть константой из перечисления ElementType. Например, чтобы указать, что аннотация применима только к полям и локальным переменным: @Targer({ ElementType.FIELD, ElementTyle.LOCAL_VARIABLE } )
  • @Inherited - это аннотация-маркер, которая может применяться в другом объявление аннотации, она касается только тех аннотаций, что будут использованы в объявлениях классов. Эта аннотация позволяет аннотации супер класса быть унаследованной в подклассе.
  • @Override - аннотация-маркер, которая может применяться только к методам. Метод, аннотированный как @Override, должен переопределять метод супер класса.
  • @Deprecated - указывает, что объявление устарело и должно быть заменено более новой формой.
  • @SafeVarargs - аннотация-маркер, применяется к методам и конструкторам. Она указывает, что никакие небезопасные действия, связанные с параметром переменного количества аргументов, недопустимы. Применяется только к методам и конструкторам с переменным количеством аргументов, которые объявлены как static или final.
  • @SuppressWarnings - эта аннотация указывает, что одно или более предупреждений, которые могут быть выданы компилятором следует подавить.

Создание собственных аннотаций:

Аннотации создаются с использование механизма, основанного на интерфейсе. Ниже пример объявление аннотации:
@interface My{ 
String str(); 
int val(); 
} 
Символ @ - указывает компилятору, что объявлена аннотация. Методы, объявленные в аннотации ведут себя скорее как поля.
//Аннотирование метода. 
@My(str = "Пример аннотации", val = 100public static void myMeth() { // ... 
Как видите для аннотирования метода надо за именем аннотации, записать в скобках список инициализируемых членов.
Существует 3 политики удержания аннотации. Политика удержания определяет, в какой точке аннотация сбрасывается.
Такие политики инкапсулированы в перечисление java.lang.annotation.RetentionPolicy. Это SOURSE,CLASS,RUNTIME.
Аннотации с политикой SOURCE содержаться только в исходном файле и отбрасываются при компиляции.
Аннотации с политикой Class сохраняются в файле, однако они недоступны JVM во время выполнения.
Аннотации с политикой удержания RUNTIME сохраняются в файле во время компиляции и остаются доступными JVM во время выполнения.

Получение аннотации

Рефлексия - это средство позволяющее получить информацию о классе во время выполнения программы.Первый шаг в использование рефлексии - это получение объекта Class:
Class<?>  c = ob.getClass(); 
Далее используя объект типа Class вы можете получить информацию о различных элементах, объявленных в классе включая аннотацию.
Например методы: getMethod()getField()getConstructor(), все методы определены в java.lang.Class

Пример:
Class<?> c = ob.getClass(); 
Method m = c.getMethod("myMeth"); 
My anno = m.getAnnotation(My.class); 
Этот пример использует рефлексию, что бы получить аннотацию MyAnno, ассоциированную с методом myMeth(). В параметры getMethod() передается название метода, который мы желаем получить.

Комментариев нет:

Отправить комментарий