Sobes.tech
Назад к вопросам
Junior — Middle
65

Можете объяснить, что означает аннотация RetentionPolicy в Java и как она влияет на жизненный цикл аннотации?

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

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());
}