РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
118 of 1163 menu

Аннотация Repeatable

Аннотация Repeatable - это мета-аннотация, которая позволяет применять одну и ту же аннотацию к одному элементу кода более одного раза. В качестве параметра аннотация принимает класс-контейнер, который должен содержать массив повторяемых аннотаций. Этот класс автоматически создается компилятором, если он не указан явно, но должен быть объявлен вручную для совместимости.

Синтаксис

@Repeatable(ContainerAnnotation.class) public @interface MyAnnotation { String value(); }

Пример

Давайте создадим повторяемую аннотацию Skill и применим ее несколько раз к классу:

import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @Repeatable(Skills.class) @interface Skill { String value(); } @Retention(RetentionPolicy.RUNTIME) @interface Skills { Skill[] value(); } @Skill("Java") @Skill("Python") public class Main { public static void main(String[] args) { Skill[] skills = Main.class.getAnnotationsByType(Skill.class); for (Skill skill : skills) { System.out.println(skill.value()); } } }

Результат выполнения кода:

"Java" "Python"

Пример

Давайте проверим, что контейнерная аннотация действительно хранит массив:

import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @Repeatable(Tags.class) @interface Tag { String value(); } @Retention(RetentionPolicy.RUNTIME) @interface Tags { Tag[] value(); } @Tag("a") @Tag("b") @Tag("c") public class Main { public static void main(String[] args) { Tags tags = Main.class.getAnnotation(Tags.class); for (Tag tag : tags.value()) { System.out.println(tag.value()); } } }

Результат выполнения кода:

"a" "b" "c"

Смотрите также

  • аннотация Annotation,
    которая является базовой для всех аннотаций
  • аннотация Retention,
    которая задает политику хранения
  • аннотация Target,
    которая ограничивает область применения
  • перечисление RetentionPolicy,
    которое содержит политики хранения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить