Повторяющиеся аннотации в Java

Повторяющиеся аннотации в JavaЕще одна новая возможность, появившаяся в версии JDK 8, позволяет повто­рять аннотации в одном и том же элементе.

Такие аннотации называются повторяющимися. Для того чтобы сделать аннотацию повторяющейся, ее следует снаб­дить аннотацией @Repeatable, определенной в пакете java.lang.annotation.

В ее поле value указывается тип контейнера для повторяющейся аннотации. Такой контейнер указывается в виде аннотации, для которой поле value является масси­вом типа повторяющейся аннотации.

Следовательно, чтобы сделать аннотацию повторяющейся, прежде нужно создать контейнерную аннотацию, а затем указать ее тип в качестве аргумента аннотации @Repeatable.

Для доступа к повторяющимся аннотациями с помощью такого метода, как, на­пример, getAnnotation(), следует воспользоваться контейнерной, а не самой повторяющейся аннотацией.

Именно такой подход и демонстрируется в приве­денном ниже примере программы. В этой программе MyAnno преобразуется в повторяющуюся аннотацию, а затем демонстрируется ее применение.

Ниже приведен результат, выводимый данной программой:

Как пояснялось ранее, чтобы сделать аннотацию MyAnno повторяющейся, ее нужно снабдить аннотацией @Repeatаble, указывающей ее контейнерную аннота­цию, которая называется MyRepeatedAnnos.

В данной программе для доступа к по­вторяющимся аннотациям вызывается метод getAnnotation(), которому переда­ется класс контейнерной аннотации, а не самой повторяющейся аннотации.

Как следует из результата выполнения данной программы, повторяющиеся аннотации разделяются запятой. Они не возвращаются по отдельности.

Еще один способ получить повторяющиеся аннотации состоит в том, чтобы воспользоваться одним из новых методов, оперирующих непосредственно по­вторяющейся аннотацией и внедренных в интерфейс AnnotatedElement в вер­сии JDК 8.

Это методы getAnnotationsByType() и getDeclaredAnnotationsByТуре(). Ниже приведена общая форма первого из этих методов.

Этот метод возвращает массив аннотаций, имеющих тип_аннотации и связанных с вызывающим объектом. Если же аннотации отсутствуют, этот массив будет иметь нулевую длину.

Вы в курсе что существует такой софт как After Effects от компании Adobe? Авторы твердят что именно аннотации помогли им сэкономить время на разработку софта.

After Effects является одним из лучшим софтом для создания видео роликов. Например, если у вас есть собственный хостинг и желаете его рекламировать то сможете с легкостью скачать такой видео-шаблон как Web Hosting Explainer и делать из него все угодно.

Подробную информацию сможете найти на известном проекте hunterae.com.

Ниже приведен пример применения метода getAnnotationsByType() для получения повторяющихся аннотаций MyAnno, представлен­ных в предыдущем примере программы:

В данном примере тип повторяющейся аннотации MyAnno передается методу getAnnotationsByType().

Возвращаемый в итоге массив содержит все экземпля­ры аннотации MyAnno, связанные с методом myMeth() (в данном примере их два).

Каждая повторяющаяся аннотация доступна в массиве по индексу. В данном случае каждая аннотация MyAnno выводится при выполнении цикла в стиле for each.

Существует ряд ограничений, накладываемых на объявления аннотаций. Во­ первых, одна аннотация не может наследовать другую.

Во-вторых, все методы, объявленные в аннотации, должны быть без параметров. Кроме того, они должны возвращать один из перечисленных ниже типов:

  • примитивный тип наподобие int или double;
  • объект класса String или Class;
  • перечислимый тип;
  • тип другой аннотации;
  • массив одного из предыдущих типов.

Аннотации не могут быть обобщенными. Иными словами, они не могут принимать параметры типа. И наконец, при объявлении методов в аннотациях нельзя указывать оператор throws.

Обязательно смотрите следующее видео: