middle
Как определить повторяемую аннотацию?
Повторяемая аннотация (repeatable annotation) — это аннотация, которую можно применить к одному элементу несколько раз. Для её создания необходимо определить аннотацию-контейнер и пометить повторяемую аннотацию мета-аннотацией @Repeatable.
Пример
// 1. Аннотация-контейнер (хранит массив повторяемых аннотаций)
@interface Schedulers {
Scheduler[] value();
}
// 2. Повторяемая аннотация с указанием контейнера
@Repeatable(Schedulers.class)
@interface Scheduler {
String birthday() default "Jan 8 1935";
}
// 3. Использование
@Scheduler(birthday = "Jan 1 2000")
@Scheduler(birthday = "Dec 25 1990")
class Person { }
Компилятор автоматически оборачивает несколько экземпляров @Scheduler в контейнер @Schedulers. Для чтения повторяемых аннотаций через рефлексию используются методы getAnnotationsByType() (возвращает массив повторяемых аннотаций) и getAnnotation() (возвращает контейнер).
На собеседовании: ключевое — объяснить, зачем нужна аннотация-контейнер и связь через
@Repeatable. Без контейнера компилятору негде хранить несколько экземпляров одной аннотации.