Аннотация Retention
Аннотация Retention - это мета-аннотация, которая применяется
к другим аннотациям и определяет политику их удержания.
Она отвечает на вопрос: на каком этапе жизненного цикла программы
информация об аннотации будет доступна. В качестве параметра
аннотация принимает одно значение из перечисления
RetentionPolicy: SOURCE, CLASS или
RUNTIME. По умолчанию используется политика
CLASS.
Синтаксис
@Retention(RetentionPolicy.SOURCE)
@Retention(RetentionPolicy.CLASS)
@Retention(RetentionPolicy.RUNTIME)
Пример
Давайте создадим аннотацию с политикой RUNTIME
и проверим её наличие через рефлексию:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation
{
}
@MyAnnotation
public class Main
{
public static void main(String[] args)
{
boolean res = Main.class.isAnnotationPresent(MyAnnotation.class);
System.out.println(res);
}
}
Результат выполнения кода:
true
Пример
Давайте создадим аннотацию с политикой SOURCE
и попробуем найти её через рефлексию:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.SOURCE)
@interface MySourceAnnotation
{
}
@MySourceAnnotation
public class Main
{
public static void main(String[] args)
{
boolean res = Main.class.isAnnotationPresent(MySourceAnnotation.class);
System.out.println(res);
}
}
Результат выполнения кода:
false
Как видите, аннотация с политикой SOURCE не сохраняется
в байт-коде, поэтому во время выполнения она недоступна.
Смотрите также
-
аннотация
RetentionPolicy,
которая содержит политики удержания -
аннотация
Target,
которая указывает область применения -
аннотация
Documented,
которая включает аннотацию в документацию -
аннотация
Inherited,
которая позволяет наследовать аннотацию