如果每个已知的类被某个自定义注解标注了,想看一下这个自定义注解有没有被其他注解标注,应该怎么做?
一、示例
1.两个自定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Aaa {
String value() default "";
}
@Aaa("标注在Bbb上注解")
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Bbb {
String value() default "";
}
注解Abb标注在了注解Bbb上。
2.被标注的普通类
@Bbb("bbb")
public class TestAnnotation implements Serializable {
private static final long serialVersionUID = 7329222600438785920L;
}
3.测试代码
public class Test {
public static void main(String[] args) {
Class<TestAnnotation> aClass = TestAnnotation.class;
Annotation bbb = aClass.getAnnotation(Bbb.class);
Class<? extends Annotation> aClass1 = bbb.getClass();
System.out.println("aClass1.getAnnotations() = " + Arrays.toString(aClass1.getAnnotations()));
Class<? extends Annotation> aClass2 = bbb.annotationType();
System.out.println("aClass2.getAnnotations() = " + Arrays.toString(aClass2.getAnnotations()));
}
}
4. 运行结果
截图不完整,不过可以看到,调用getClass()并不能得到我们想要的结果,而是要使用annotationType()方法。
二、介绍
再来看一下输出他们的类型信息:
public class Test {
public static void main(String[] args) {
Class<TestAnnotation> aClass = TestAnnotation.class;
Annotation bbb = aClass.getAnnotation(Bbb.class);
System.out.println("bbb.getClass() = " + bbb.getClass());
System.out.println("bbb.annotationType() = " + bbb.annotationType());
}
}
结果:
只有调用annotationType()方法才能获取我们想要的那个class对象。
下面是annotationType()方法注释的截图:
中文版: