Мне нужно знать аннотации класса Java. Я использую Ломбок.
Образец:
@Data
@Builder
public class JavaBean {}
Я попробовал java.lang.annotation.Annotation[] annotation = JavaBean.class.getAnnotations, но он не показывает данные и построитель.
Мне нужно знать аннотации класса Java. Я использую Ломбок.
Образец:
@Data
@Builder
public class JavaBean {}
Я попробовал java.lang.annotation.Annotation[] annotation = JavaBean.class.getAnnotations, но он не показывает данные и построитель.
Я думаю, вы не можете видеть аннотации в JavaBean.class.getAnnotations, потому что @Retention равно SOURCE.
Этот тип аннотаций не требуется во время выполнения.
Подробнее: Политика хранения ИСТОЧНИКА АННОТАЦИИ
Хорошего дня.
Ответ находится в источнике этих аннотаций:
@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)
, что означает, что эти аннотации отсутствуют во время выполнения вашего класса, поэтому вы не можете получить эти аннотации.
Аннотации Lombok предварительно обрабатываются перед фактической компиляцией, поэтому скомпилированные классы содержат их не как аннотацию, а как уже сгенерированный код.
@Data
генерирует весь шаблон, который обычно связан с простыми POJO (обычными старыми объектами Java) и bean-компонентами: геттеры для всех полей, сеттеры для всех неконечных полей и соответствующие toString, equals и hashCode - person Khalid Shah   schedule 17.10.2018@Builder
см. projectlombok.org/api/lombok/Builder.html - person Khalid Shah   schedule 17.10.2018