java 元注解(3)–@documented和@inherited

@Documented 表示是否可被例如javadoc此类的工具文档化

@Inherited 如果子类想获取父类的注解信息,需要在父类上加上@Inherited注解.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface SuperClass {

public String name() default "";
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface SubClass {
public String name() default "";
}
@SuperClass
public class Super {
}
@SubClass
public class Sub extends Super{
}
public class TestInherited {
public static void main(String[] args) {
Class<Sub> clazz = Sub.class;
System.out.println(clazz.isAnnotationPresent(SuperClass.class));
System.out.println(clazz.isAnnotationPresent(SubClass.class));
System.out.println(clazz.getAnnotation(SuperClass.class));
System.out.println(clazz.getAnnotation(SubClass.class));
System.out.println(Arrays.toString(clazz.getAnnotations()));
System.out.println(Arrays.toString(clazz.getDeclaredAnnotations())); ////自身
}
}

打印结果:
true
true
@com.runlion.goushuini.util.inter.self.SuperClass(name=)
@com.runlion.goushuini.util.inter.self.SubClass(name=)
[@com.runlion.goushuini.util.inter.self.SuperClass(name=),@com.runlion.goushuini.util.inter.self.SubClass(name=)]
[@com.runlion.goushuini.util.inter.self.SubClass(name=)]
如果将SuperClass的@Inherited注解去掉,则打印结果为:
false
true
null
@com.runlion.goushuini.util.inter.self.SubClass(name=)
[@com.runlion.goushuini.util.inter.self.SubClass(name=)]
[@com.runlion.goushuini.util.inter.self.SubClass(name=)]