Политика хранения аннотаций ИСТОЧНИК

Из документа Java:

КЛАСС: Аннотации должны быть записаны в файл класса компилятором, но не должны сохраняться виртуальной машиной во время выполнения.

RUNTIME: аннотации должны быть записаны в файл класса компилятором и сохранены виртуальной машиной во время выполнения, чтобы они могли быть прочитаны рефлексивно.

ИСТОЧНИК: Аннотации должны быть исключены компилятором.

Я понимаю использование RUNTIME (для использования аннотации с отражением) и CLASS (для компилятора), но я не понимаю, когда это может быть полезно для использования

@Retention (RetentionPolicy.SOURCE)

Вы можете объяснить?


person JohnJohnGa    schedule 08.11.2011    source источник


Ответы (2)


Такие вещи, как @SuppressWarnings, @Override, являются аннотациями, используемыми компилятором, и не нужны во время выполнения. Для тех, кто имеет смысл RetentionPolicy.SOURCE. Также аннотации могут использоваться для генерации кода (см. Spring ROO) - такие аннотации также не требуются во время выполнения.

person gkamal    schedule 08.11.2011
comment
а почему не RetentionPolicy.CLASS? - person JohnJohnGa; 08.11.2011
comment
+1: Некоторые аннотации, используемые компилятором, сохраняют КЛАСС. - person Peter Lawrey; 08.11.2011
comment
Они не нужны в ByteCode (в файле .class). - person gkamal; 08.11.2011
comment
@JohnJohnGa, компилятору нужны аннотации SuppressWarnings и Override только для кода, который он немедленно компилирует. Устарело должно быть CLASS или RUNTIME, так как это может привести к предупреждению в коде, скомпилированном позже (который его использует). - person Peter Lawrey; 08.11.2011
comment
Иногда я создаю SOURCE аннотацию (аннотации) в виде «Задач», «Попыток», «ловушек» или просто напоминаний. Я могу написать для него процессоры или искать в IDE - person nabster; 31.10.2019

Этот ответ имеет смысл - https://stackoverflow.com/a/43910948/3009968.

Вы не хотели бы включать зависимость, желаемые эффекты которой реализуются еще до компиляции кода. Например. @SuppressWarnings

Вы не хотели бы включать зависимость, которая используется компилятором для генерации кода, но не требуется во время выполнения. Например. как уже упоминалось в предыдущем ответе - spring roo.

person Manojkumar Khotele    schedule 11.10.2019