Ответ находится в источнике этих аннотаций:
@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)
, что означает, что эти аннотации отсутствуют во время выполнения с вашим классом, следовательно, вы не можете получить эти аннотации ..