Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpAnRd 123 of 322 menu
◀ ▶

Чтение пометки в Java

Пометка с RetentionPolicy.RUNTIME остаётся на типе после сборки. Рефлексия Java ищет такие метки на Class и возвращает прокси с элементами, объявленными в @interface.

Удобный способ - getAnnotation: он даёт одну метку нужного типа или null, если её нет:

import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @interface Stage { String name(); } @Stage(name = "alpha") class Pipeline { } public class Main { public static void main(String[] args) { Stage tag = Pipeline.class.getAnnotation(Stage.class); System.out.println(tag.name()); } }

Перед чтением можно проверить наличие метки через isAnnotationPresent. Если меток несколько типов, смотрят массив getAnnotations или getDeclaredAnnotations у того же класса:

import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @interface Stage { String name(); } @Stage(name = "beta") class Pipeline { } public class Main { public static void main(String[] args) { if (Pipeline.class.isAnnotationPresent(Stage.class)) { Stage tag = Pipeline.class.getAnnotation(Stage.class); System.out.println(tag.name()); } } }

Элементы метки читают как методы прокси - без отдельного API для каждого поля:

import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @interface Owner { String team(); } @Owner(team = "billing") class InvoiceJob { } public class Main { public static void main(String[] args) { Owner owner = InvoiceJob.class.getAnnotation(Owner.class); if (owner != null) { System.out.println(owner.team()); } } }

Объявите метку с элементом tier типа String и сроком RUNTIME. Повесьте её на класс CachePolicy. Из main выведите значение tier средствами рефлексии.

Сделайте метку с целым элементом version и класс Schema с этой меткой. Получите метку и напечатайте число version.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить