РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
122 of 1163 menu

Поле CLASS класса RetentionPolicy

Поле CLASS класса RetentionPolicy - это константа перечисления, которая задаёт политику удержания аннотации. Когда аннотация помечена Retention со значением CLASS, компилятор записывает её в файл .class, однако виртуальная машина Java не сохраняет её в памяти во время выполнения. Это означает, что такая аннотация видна инструментам, работающим с байт-кодом (например, анализаторам или генераторам кода), но недоступна через рефлексию. Если политика удержания не указана явно, по умолчанию используется именно CLASS. Само поле не принимает параметров - это элемент перечисления RetentionPolicy, который передаётся в атрибут value аннотации Retention.

Синтаксис

RetentionPolicy.CLASS

Пример

Объявим аннотацию с политикой удержания CLASS и проверим, доступна ли она во время выполнения:

import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.CLASS) @interface MyClassAnnotation { } public class Main { public static void main(String[] args) { boolean present = Main.class.isAnnotationPresent(MyClassAnnotation.class); System.out.println(present); } }

Результат выполнения кода:

false

Несмотря на то что аннотация присутствует в байт-коде, во время выполнения она не видна - поэтому isAnnotationPresent возвращает false.

Пример

Сравним поведение CLASS и RUNTIME: только аннотация с RUNTIME будет обнаружена через рефлексию:

import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.CLASS) @interface ClassRetention { } @Retention(RetentionPolicy.RUNTIME) @interface RuntimeRetention { } @ClassRetention @RuntimeRetention public class Main { public static void main(String[] args) { System.out.println(Main.class.isAnnotationPresent(ClassRetention.class)); System.out.println(Main.class.isAnnotationPresent(RuntimeRetention.class)); } }

Результат выполнения кода:

false true

Смотрите также

  • класс RetentionPolicy,
    который содержит все политики удержания
  • аннотация Retention,
    которая задаёт политику удержания
  • поле SOURCE,
    которое отбрасывает аннотацию после компиляции
  • поле RUNTIME,
    которое сохраняет аннотацию во время выполнения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить