Назад к вопросам
IT One
Junior — Middle
65
Можете объяснить, что означает аннотация RetentionPolicy в Java и как она влияет на жизненный цикл аннотации?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Аннотация @Retention в Java определяет, как долго аннотация будет сохраняться и доступна в процессе выполнения программы. Она принимает значение из перечисления RetentionPolicy, которое может быть:
SOURCE— аннотация доступна только в исходном коде и удаляется компилятором, не попадает в байт-код.CLASS— аннотация сохраняется в байт-коде, но недоступна во время выполнения (по умолчанию).RUNTIME— аннотация сохраняется в байт-коде и доступна во время выполнения через рефлексию.
Например, если аннотация помечена @Retention(RetentionPolicy.RUNTIME), то её можно получить через рефлексию во время работы программы, что полезно для фреймворков и библиотек, которые анализируют аннотации динамически.
Пример:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value();
}
@MyAnnotation("example")
public class Test {}
// В рантайме можно получить аннотацию так:
MyAnnotation ann = Test.class.getAnnotation(MyAnnotation.class);
if (ann != null) {
System.out.println(ann.value());
}