Аннотация (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 можно отметить следующие:
- Необходимость перекомпилировать код при изменениях;
- Для использования аннотаций необходим доступ к исходному код, которого может не быть при использовании сторонних классов или библиотек.
Источники[править]
- Lesson: Annotations // Oracle
- Аннотации в Java // Quizful