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

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

Пометка с политикой RetentionPolicy.RUNTIME остаётся на типе после сборки. Рефлексия ищет такие метки на 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:

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) { if (InvoiceJob.class.isAnnotationPresent(Owner.class)) { Owner owner = InvoiceJob.class.getAnnotation(Owner.class); System.out.println(owner.team()); } } }

Если меток несколько, смотрят массив getAnnotations или getDeclaredAnnotations и отбирают нужный тип вручную. Параметры метки читают как методы интерфейса - без отдельного API для каждого поля.

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

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

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