Java 8 @Repeatable аннотация
Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 8. Надеемся, что данная статья Вам будет полезна. Приятного прочтения!
1. Введение
В Java 8 работа с аннотациями стала немного легче, поскольку появилась возможность использовать несколько аннотаций одного типа.
2. Пример
Для примера нам нужно создать наши аннотации
1 2 3 4 5 6 7 8 |
@Retention(RetentionPolicy.RUNTIME) @interface Thoughts { Thought[] value(); } @interface Thought { String value(); } |
До Java 8 для нескольких аннотаций одного типа мы использовали аннотацию-контейнер
1 2 3 |
@Thoughts({@Thought("быть или не быть"), @Thought("вот в чем вопрос")}) class Human { } |
С выходом Java 8 появилась аннотация @Repeatable, которая позволяет использовать несколько аннотаций одного типа. Для этого необходимо изменить аннотацию @Thought
1 2 3 4 |
@Repeatable(Thoughts.class) @interface Thought { String value(); } |
Использование этой аннотации выглядит следующим образом
1 2 3 4 |
@Thought("быть или не быть") @Thought("вот в чем вопрос") class Human { } |
При использовании рефлексии для получения информации об аннотации следует помнить, что во втором случае компилятор вместо аннотаций @Thought подставит @Thoughts
1 2 3 4 5 6 7 8 9 10 |
Thought thought = Human.class.getAnnotation(Thought.class); System.out.println(thought); //output: null Thoughts thoughts = Human.class.getAnnotation(Thoughts.class); System.out.println(thoughts.value().length); //output: 2 Thought[] arrThoughts = Human.class.getAnnotationsByType(Thought.class); System.out.println(arrThoughts.length);//output: 2 |
И хоть мы и не объявляли аннотацию @Thoughts, она все равно нам доступна для вызова. Так же есть возможность получить аннотации с помощью метода getAnnotationsByType(Thought.class). Какой метод использовать решать вам.
В Java 8 есть еще множество полезных нововведений, которые можно найти тут
Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.