Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpAnRt 122 of 322 menu
◀ ▶

Срок хранения в Java

Пометка может исчезнуть после компиляции, остаться в байткоде или дожить до запуска программы. Срок задаёт аннотация @Retention на типе своей метки через RetentionPolicy.

Политика RetentionPolicy.SOURCE оставляет метку только в исходнике. После компиляции в class-файле её уже нет - удобно для подсказок редактору и генерации, которые смотрят на текст кода.

Метка «только для исходника» объявляется так:

import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.SOURCE) @interface SourceOnly { String tag(); }

Политика RetentionPolicy.CLASS сохраняет пометку в байткоде, но не обязана быть видимой стандартной рефлексии во время выполнения. Так часто помечают служебные типы для статического анализа:

import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.CLASS) @interface ClassTag { String tag(); }

Политика RetentionPolicy.RUNTIME оставляет метку в собранном классе до запуска JVM. Это нужно, когда программа или библиотека позже читают пометки с уже загруженного типа:

import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @interface RuntimeTag { String tag(); } @RuntimeTag(tag = "demo") class Marker { } public class Main { public static void main(String[] args) { System.out.println(Marker.class.getSimpleName()); } }

Объявите три типа меток с одним строковым элементом и разным @Retention: SOURCE, CLASS и RUNTIME. Повесьте каждую на свой пустой класс-заглушку.

На класс с меткой RUNTIME добавьте main, который выводит простое имя типа. Чтение полей метки из программы пока не требуется.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить