Класс RetentionPolicy
Класс RetentionPolicy представляет собой перечисление (enum), которое используется в аннотации @Retention для указания того, как долго аннотация должна сохраняться. Другими словами, он определяет, будет ли аннотация доступна только в исходном коде, сохранена в скомпилированном классе или доступна во время выполнения программы через рефлексию. Класс содержит три константы: SOURCE, CLASS и RUNTIME.
Синтаксис
Синтаксис использования класса в аннотации @Retention:
@Retention(RetentionPolicy.SOURCE)
@Retention(RetentionPolicy.CLASS)
@Retention(RetentionPolicy.RUNTIME)
Также можно обратиться к константам напрямую:
RetentionPolicy.SOURCE
RetentionPolicy.CLASS
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