运行时的Java元注释

时间:2011-04-12 01:48:41

标签: java annotations

我有一个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注释应用于它。然后我将扫描该类以查找由限定符注释注释的任何注释。但如果我无法访问或识别限定符注释,那是不可能的。

先谢谢。

2 个答案:

答案 0 :(得分:5)

你有没有尝试过:

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

答案 1 :(得分:1)

难道你不能给Qualifier一个默认值吗?通过这种方式,您将能够提取它。

public @interface Qualifier { 
    boolean value default true;
}