Поле SOURCE
Поле SOURCE класса RetentionPolicy используется в аннотации @Retention
для указания того, что помеченная аннотация должна сохраняться
только на уровне исходного кода. Это означает, что информация
об аннотации полностью отбрасывается компилятором и не попадает
в скомпилированный байт-код. Такие аннотации не доступны
во время выполнения программы через рефлексию. Данное значение
является значением по умолчанию для аннотации @Retention.
Синтаксис
RetentionPolicy.SOURCE
Пример
Давайте объявим аннотацию с политикой удержания SOURCE
и применим её к классу:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.SOURCE)
@interface SourceAnnotation
{
}
@SourceAnnotation
public class Main
{
public static void main(String[] args)
{
boolean hasAnnotation = Main.class.isAnnotationPresent(SourceAnnotation.class);
System.out.println(hasAnnotation);
}
}
Результат выполнения кода:
false
Пример
Давайте убедимся, что аннотация с политикой SOURCE
не видна через рефлексию, а аннотация с политикой RUNTIME
видна:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.SOURCE)
@interface SourceAnno
{
}
@Retention(RetentionPolicy.RUNTIME)
@interface RuntimeAnno
{
}
@SourceAnno
@RuntimeAnno
public class Main
{
public static void main(String[] args)
{
Class<?> clazz = Main.class;
System.out.println(clazz.isAnnotationPresent(SourceAnno.class));
System.out.println(clazz.isAnnotationPresent(RuntimeAnno.class));
}
}
Результат выполнения кода:
false
true
Смотрите также
-
класс
RetentionPolicy,
который содержит политики удержания аннотаций -
аннотация
Retention,
которая задаёт политику удержания -
поле
CLASS,
которое сохраняет аннотацию в байт-коде -
поле
RUNTIME,
которое сохраняет аннотацию во время выполнения