Gymterview
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. Без контейнера компилятору негде хранить несколько экземпляров одной аннотации.