Руководство по аннотациям в Java

Аннотации в Java предоставляют лишь информацию о коде и не имеют прямого влияния на сам код. В этом руководстве мы узнаем следующее: как пишут аннотаций; как используют аннотации и как парсить аннотации с помощью рефлексии.

java-annotations

 

Создание пользовательских аннотаций в Java

Создание пользовательских аннотаций в Java очень похоже на создание интерфейса, только вот само ключевое слово interface пишется со знаком @. Давайте посмотрим пример аннотации, а затем мы обсудим его функции.

MInfo.java

  • Методы в пользовательской аннотации должны быть без параметров.
  • Методы в пользовательской аннотации могут возвращать лишь примитивы, String, Перечисления (Enums), аннотации.
  • Методы в пользовательской аннотации могут иметь значения по умолчанию.
  • Аннотации могут иметь мета-аннотации, прикрепленные к ним. Мета аннотации используются для предоставления информации об аннотации. Есть четыре типа мета-аннотаций:
    1. @Documented — указывает, что элементы, использующие эту аннотацию должны быть задокументированы в Javadoc и аналогичных инструментах.
    2. @Target — указывает виды элементов программы, к которым применим тип аннотации. Возможные значения: TYPE, METHOD, CONSTRUCTOR, FIELD и т.д. Если мета-аннотация @Target не используется, то аннотация может быть использована в любом элементе программы.
    3. @Inherited — указывает, что тип аннотации автоматически передается по наследству. Если пользователь запрашивает тип аннотации на объявление класса, а объявление класса не имеет аннотацию для этого типа, то суперкласс класса будет автоматически запрошен для типа аннотации. Этот процесс будет повторяться до тех пор, пока аннотация для этого типа не будь найдена или будет достигнута верхняя часть иерархии классов (Object).
    4. @Retention — указывает, как долго сохранять аннотации с аннотированными типами. Этим занимается аргумент RetentionPolicy, для которого можно использовать значения SOURCE, CLASS или RUNTIME.

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

В Java используется 3 встроенные аннотации:

  1. @Override — когда мы хотим переопределить метод суперкласса, мы должны использовать эту аннотацию — это сообщит компилятору, что мы переопределили метод. Поэтому, когда метод суперкласса будет удален или изменен, компилятор выдаст сообщение об ошибке. Очень важно всегда использовать аннотацию @Override при переопределении метода.
  2. @Deprecated — когда мы хотим сообщить компилятору то, что метод является устаревшим, мы должны использовать эту аннотацию. Документация по Java рекомендует предоставлять компилятору информацию о том, почему этот метод является устаревшим и какой метод следует использовать вместо него в Javadoc.
  3. @SuppressWarnings — это простой способ попросить компилятор игнорировать конкретные предупреждения, если они вдруг появятся.

Давайте посмотрим пример, показывающий использование встроенных в Java аннотаций, а также использование аннотаций, созданных нами в примере выше.

AnnotationExampleClass.java

Парсинг Java аннотаций

Мы будем использовать Reflection (рефлексию) для анализа Java-аннотаций. Обратите внимание, что политика сохранения аннотаций должна быть RUNTIME, в противном случае информация не будет доступна для парсинга во время выполнения и мы не сможем извлечь какие-либо данные.

AnnotationParsingClass.java

Результат выполнения приведенной выше программы:

Reflection API является очень мощным инструментом и очень часто используется в Java, J2EE фреймворках (Spring, Hibernate, JUnit и многих других).

Вот и закончилось небольшое руководство по аннотациям в Java. Следите за обновлениями на сайте.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *