Аннотация (Java)

Материал из Циклопедии
Перейти к навигации Перейти к поиску

Аннотация  — специальная форма метаданных, которая может быть добавлена в исходный код.

Предпосылки введения аннотаций[править]

До появления аннотаций для конфигурации системы использовался xml-файл. Это имело свои недостатки:

  • Сложная структура xml-файла;
  • Компилятор не осуществляет проверку корректности;
  • Класс и его метаданные разнесены по разным файлам.

Поэтому в Java 1.5 был введён механизм аннотаций.

Основные задачи[править]

Аннотации могут быть использовании для выполнения следующих задач:

  • Информация для компилятора — аннотации могут быть использованы компилятором для обнаружения ошибок (например, @Override) или для подавления предупреждений (@SuppressWarnings);
  • Дополнительная обработка кода во время компиляции — внешнее программное обеспечение может использовать аннотации для генерации кода или разного рода файлов конфигураций;
  • Дополнительная функциональность кода за счет обработки аннотаций во время выполнения программы — некоторые аннотации доступны во время выполнения программы.

Собственные аннотации[править]

Java не только предоставляет ряд предопределённых аннотаций, но и оставляет возможность реализовывать собственные аннотации.

Для определения собственной аннотации следует использовать конструкцию @interface. Тело аннотации может содержать публичные методы без параметров, определяющие элементы аннотации (int value();). Определить значение по умолчанию для элемента можно используя ключевое слово default (int value() default 3;). В качестве типа атрибутов допустимо использовать следующие типы:

  • примитивы;
  • String;
  • Class;
  • enum;
  • annotation (рекурсия запрещена);
  • одномерный массив элементов любого из вышеперечисленных типов.

Использование аннотации осуществляется с помощью конструкции вида @AnnotationName(key=value)

Поведение аннотации можно сконфигурировать предоставляемыми в Java аннотациями. Так, аннотация Target определяет, к каким элементам может применяться создаваемая аннотация. В качестве аргумента она принимает элемент перечисления ElementType. Аннотация @Retention указывает, в какой момент жизни программного кода будет доступна создаваемая аннотация. Принимает аргументом элемент перечисления RetentionPolicy:

  • SOURCE — аннотация доступна только в исходном коде и сбрасывается во время создания .class файла;
  • CLASS — аннотация хранится в .class файле, но недоступна во время выполнения программы;
  • RUNTIME — аннотация хранится в .class файле и доступна во время выполнения программы.

Недостатки[править]

Из недостатков аннотаций перед xml можно отметить следующие:

  • Необходимость перекомпилировать код при изменениях;
  • Для использования аннотаций необходим доступ к исходному код, которого может не быть при использовании сторонних классов или библиотек.

Источники[править]