Встроенные аннотации
В Java определено очень много встроенных аннотаций. Большинство из них специализированы, но семь имеют общее назначение. Четыре из них импортируются из java.lang.annotation: @Retention, @Documented, @Target и @Inherited. Три других — @Override, @Deprecated и @SuppressWarnings — включены в java. lang. Каждая из них описана ниже.
@Retention
@Retention предназначена для применения только в качестве аннотации к другим аннотациям. Определяет политику удержания, как было описано в настоящей главе.
@Documented
@Documented — это маркер-интерфейс, который сообщает инструменту, что аннотация должна быть документирована. Он предназначен для использования только в качестве аннотации к объявлению аннотации.
@Target @Target — аннотация, специфицирующая типы объявлений, к которым может быть применима аннотация. Предназначена для использования только в качестве аннотации к другим аннотациям. @Target принимает один аргумент, который должен быть константой из перечисления ElementType. Этот аргумент специфицирует типы объявлений, к которым может быть применена аннотация. Эти константы описаны в табл. 12.1 вместе с типами объявлений, к которым они относятся.
Таблица 12.1. Константы из перечисления ElementType
Целевая константа | Аннотация может быть |
ANNOTATION_TYРЕ | Другая аннотация |
CONSTRUCTOR | Конструктор |
FIELD | Поле |
LOCAL_VARIABLE | Локальная переменная |
METHOD | Метод |
PACKAGE | Пакет |
PARAMETER | Параметр |
TYPE | Класс, интерфейс или перечисление |
Вы можете специфицировать одно или более из этих значений в аннотации @Target. Чтобы указать множественные значения, вы должны поместить их внутрь ограниченного фигурными скобками списка. Например, чтобы специфицировать, что аннотация применима только к полям и локальным переменным, нужно использовать следующую аннотацию @Target:
@Target( { ElementType.FIELD, ElementType.LOCAL_VARIABLE } )
@Inherited
@Inherited — аннотация-маркер, которая может применяться в другом объявлении аннотации. Более того, она касается только тех аннотаций, что будут использоваться в объявлениях классов. @Inherited позволяет аннотации суперкласса быть унаследованной в подклассе. Таким образом, когда осуществляется запрос к подклассу на предмет специфической аннотации, то если у этой аннотации в подклассе нет, проверяется суперкласс. Если запрошенная аннотация присутствует у суперкласса и она аннотирована как @Inherited, то эта аннотация будет возвращена.
@Override
@Override — аннотация-маркер, которая может применяться только в методах. Метод, аннотированный как @Override, должен переопределять метод суперкласса. Если он этого не делает, в результате возникает ошибка времени компиляции. Она используется для обеспечения того, что метод суперкласса будет действительно переопределен, а не просто перегружен.
@Deprecated
@Deprecated — аннотация-маркер. Она указывает, что объявление устарело и должно быть заменено более новой формой.
@SuppressWarnings
@SuppressWarnings — указывает, что одно или более предупреждений, которые могут быть выданы компилятором, следует подавить. Подавляемые предупреждения специфицируются именами в строковой форме. Эта аннотация может быть применима к объявлениям любого типа.