Как я узнаю аннотации класса Java? - PullRequest
0 голосов
/ 17 октября 2018

Мне нужно знать аннотации класса Java.Я использую Lombok.

Пример:

@Data
@Builder
public class JavaBean {}

Я пробовал java.lang.annotation.Annotation [] annotation = JavaBean.class.getAnnotations, но он не показывает данные и построитель.

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Я думаю, что вы не можете видеть аннотации в JavaBean.class.getAnnotations, потому что @Retention равно SOURCE.

Этот вид аннотации не требуется во время выполнения.

Для получения дополнительной информации: Аннотация ИСТОЧНИК Политика хранения

Хорошего дня.

0 голосов
/ 17 октября 2018

Ответ находится в источнике этих аннотаций:

@Target({TYPE, METHOD, CONSTRUCTOR})
@Retention(SOURCE)
public @interface Builder {
.....

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Data {
.....

Ваш код для получения аннотации правильный, но он @Retention(RetentionPolicy.SOURCE), который играет здесь роль.

Java определил 3 типаполитика хранения через перечисление java.lang.annotation.RetentionPolicy.Он имеет SOURCE, CLASS и RUNTIME.

1) Аннотация с политикой хранения SOURCE будет сохраняться только с исходным кодом и удаляться во время компиляции.

2) Аннотация с политикой хранения CLASS будет сохранена до компиляции кода и удалена во время выполнения.

3) Аннотация с политикой хранения RUNTIME будет доступна JVM во время выполнения.

@Data и @Builder помечены @Retention(SOURCE), что означает, что эти аннотации отсутствуют во время выполнения с вашим классом, следовательно, вы не можете получить эти аннотации ..

0 голосов
/ 17 октября 2018

Аннотации Lombok предварительно обрабатываются перед фактической компиляцией, поэтому скомпилированные классы содержат их не как аннотацию, а как уже сгенерированный код.

...