Типы аннотаций Java
Типы аннотаций Java
В этом руководстве мы узнаем о различных типах аннотаций Java с помощью примеров.
Аннотации Java — это метаданные (данные о данных) для исходного кода нашей программы. Java SE предоставляет несколько предопределенных аннотаций. Кроме того, мы также можем создавать собственные аннотации в соответствии с нашими потребностями.
Если вы не знаете, что такое аннотации, посетите учебник по аннотациям Java.
Эти аннотации можно разделить на следующие категории:
1. Предопределенные аннотации
03
14
26
35
41
2. Пользовательские аннотации
3. Мета-аннотации
54
68
71
85
94
Предопределенные типы аннотаций
1. @Устарело
102
аннотация – это аннотация-маркер, указывающая, что элемент (класс, метод, поле и т. д.) устарел и заменен новым элементом.
Его синтаксис:
09
Когда программа использует элемент, объявленный устаревшим, компилятор выдает предупреждение.
Мы используем Javadoc 118
тег для документирования устаревшего элемента.
18
Пример 1:Пример аннотации @Deprecated
26
Вывод
30<час>
2. @Переопределить
120
аннотация указывает, что метод подкласса переопределяет метод суперкласса с тем же именем метода, типом возвращаемого значения и списком параметров.
Не обязательно использовать 130
при переопределении метода. Однако, если мы его используем, компилятор выдает ошибку, если что-то не так (например, неправильный тип параметра) при переопределении метода.
Пример 2:Пример аннотации @Override
48
Вывод
56
В этом примере, создав объект dog1 Собака класса, мы можем вызвать его метод printMessage() который затем выполняет 140
заявление.
С 151
определен в обоих классах, метод подкласса Dog переопределяет метод суперкласса Animal . Следовательно, 168
подкласса.
3. @SuppressWarnings
Как следует из названия, 176
аннотация предписывает компилятору подавлять предупреждения, генерируемые во время выполнения программы.
Мы можем указать тип предупреждений, которые должны быть подавлены. Предупреждения, которые можно подавить, зависят от компилятора, но есть две категории предупреждений:устаревшие и не проверено .
Чтобы подавить определенную категорию предупреждений, мы используем:
69
Например,
71
Чтобы подавить несколько категорий предупреждений, мы используем:
87
Например,
97
Категория 188
указывает компилятору подавлять предупреждения, когда мы используем устаревший элемент.
Категория 194
указывает компилятору подавлять предупреждения, когда мы используем необработанные типы.
И неопределенные предупреждения игнорируются. Например,
105пре>Пример 3:Пример аннотации @SuppressWarnings
112Вывод
127Здесь
<час>206
был помечен как устаревший и при использовании будет выдавать предупреждения компилятора. С помощью216
аннотации, мы можем избежать предупреждений компилятора.4. @SafeVarargs
229
аннотация утверждает, что аннотированный метод или конструктор не выполняет небезопасных операций со своими varargs (переменное число аргументов).Мы можем использовать эту аннотацию только для методов или конструкторов, которые нельзя переопределить. Это связано с тем, что переопределяющие их методы могут выполнять небезопасные операции.
До Java 9 мы могли использовать эту аннотацию только в окончательных или статических методах, потому что они не могут быть переопределены. Теперь мы можем использовать эту аннотацию и для закрытых методов.
Пример 4:Пример аннотации @SafeVarargs
132Предупреждения
144Вывод
157Здесь
230
240
указывает аргумент переменной длины типа259
. Это означает, что метод263
может иметь ноль или более аргументов.
Приведенная выше программа компилируется без ошибок, но выдает предупреждения, когда
276
аннотация не используется.Когда мы используем
285
аннотация в приведенном выше примере,163Мы получаем тот же вывод, но без каких-либо предупреждений. Непроверенные предупреждения также подавляются при использовании этой аннотации.
<час>5. @ФункциональныйИнтерфейс
Java 8 впервые представила этот
292
аннотация. Эта аннотация указывает, что объявление типа, в котором она используется, является функциональным интерфейсом. Функциональный интерфейс может иметь только один абстрактный метод.Пример 5:Пример аннотации @FunctionalInterface
177Если мы добавим еще один абстрактный метод, скажем,
184Теперь, когда мы запустим программу, мы получим следующее предупреждение:
195Не обязательно использовать
308
аннотация. Компилятор будет рассматривать любой интерфейс, соответствующий определению функционального интерфейса, как функциональный интерфейс.Мы используем эту аннотацию, чтобы убедиться, что функциональный интерфейс имеет только один абстрактный метод.
Однако у него может быть любое количество стандартных и статических методов, потому что у них есть реализация.
200<час>Пользовательские аннотации
Также можно создавать собственные аннотации.
Его синтаксис:
217Вот что вам нужно знать о пользовательских аннотациях:
- Аннотации можно создавать с помощью
319
. за которым следует название аннотации. - Аннотация может содержать элементы, которые выглядят как методы, но не имеют реализации.
- Значение по умолчанию является необязательным. Параметры не могут иметь нулевое значение.
- Тип возвращаемого значения метода может быть примитивным, перечислением, строкой, именем класса или массивом этих типов.
Пример 6. Пример пользовательской аннотации
227
Вывод
236<час>
Метааннотации
Мета-аннотации – это аннотации, которые применяются к другим аннотациям.
1. @Сохранение
323
аннотация указывает уровень, до которого будет доступна аннотация.
Его синтаксис:
249
Существует 3 типа политик хранения:
- RetentionPolicy.SOURCE - Аннотация доступна только на уровне исходного кода и игнорируется компилятором.
- RetentionPolicy.CLASS - Эта аннотация доступна компилятору во время компиляции, но игнорируется виртуальной машиной Java (JVM).
- RetentionPolicy.RUNTIME - Аннотация доступна для JVM.
Например,
259<час>
2. @Документировано
По умолчанию пользовательские аннотации не включены в официальную документацию по Java. Чтобы включить нашу аннотацию в документацию Javadoc, мы используем 338
аннотация.
Например,
263<час>
3. @Цель
Мы можем ограничить применение аннотации к определенным целям с помощью 349
аннотация.
Его синтаксис:
277
352
может иметь один из следующих типов:
Тип элемента | Цель |
---|---|
364 | Тип аннотации |
378 | Конструкторы |
380 | Поля |
398 | Локальные переменные |
405 | Методы |
411 | Пакет |
425 | Параметр |
435 | Любой элемент класса |
Например,
282
В этом примере мы ограничили использование этой аннотации только методами.
Примечание. Если целевой тип не определен, аннотацию можно использовать для любого элемента.
<час>4. @Унаследовано
По умолчанию тип аннотации не может быть унаследован от суперкласса. Однако, если нам нужно наследовать аннотацию от суперкласса к подклассу, мы используем 440
аннотация.
Его синтаксис:
293
Например,
302<час>
5. @Повторяемый
Аннотация с пометкой 456
может применяться несколько раз к одному и тому же объявлению.
315
Значение, определенное в 460
annotation — это аннотация контейнера. Аннотация контейнера имеет переменную value типа массива вышеуказанной повторяемой аннотации. Здесь 477
являются содержащим тип аннотации.
325
Теперь 488
аннотацию можно использовать несколько раз в одном и том же объявлении.
338<час>
Если нам нужно получить данные аннотаций, мы можем использовать Reflection API.
Чтобы получить значения аннотаций, мы используем 493
или 508
метод, определенный в Reflection API.
java