Java Meta Annotations во время выполнения - PullRequest
3 голосов
/ 12 апреля 2011

У меня есть мета-аннотация Java как таковая

@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = { ElementType.ANNOTATION_TYPE })
public @interface Qualifier {
}

У меня есть еще одна аннотация:

@Qualifier
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = { ElementType.TYPE })
public @interface LeafEntity {
   String name() default "";
}

Во время выполнения я могу извлечь аннотацию LeafEntity, используя

getClass().getAnnotation(LeafEntity.class);

Тем не менее, я хотел бы знать, возможно ли получить доступ к чему-либо о Квалификаторе? Я имею в виду, для чего нужны аннотации к аннотациям, если вы не можете получить к ним доступ?

Я пробовал все следующее:

getClass().getAnnotation(Qualifier.class);
getClass().getAnnotation(LeafEntity.class).getClass().getAnnotation(Qualifier.class);
getClass().getAnnotation(LeafEntity.class) instanceof Qualifier.class;

Если кто-то знает, как получить доступ к аннотации Qualifier, я был бы признателен за пример.

Причина, по которой это важно, в том, что у меня есть базовая аннотация, называемая Квалификатор. Я хотел бы позволить моим пользователям определять любые аннотации, которые им нравятся, просто применяя к ним аннотацию Qualifier. Затем я просканировал бы класс на наличие любой аннотации, которая была аннотирована аннотацией Qualifier. Но это невозможно, если я не могу получить доступ или определить аннотации Qualifier.

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 12 апреля 2011

Вы пробовали:

getClass().getAnnotation(LeafEntity.class).annotationType().getAnnotation(Qualifier.class);
1 голос
/ 12 апреля 2011

Не могли бы вы дать Qualifier значение со значением по умолчанию?Таким образом, вы сможете извлечь его.

public @interface Qualifier { 
    boolean value default true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...