好,开始!先带入一个熟悉的Java注解。
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
@Target、@Retention这两个注解与 其他*@Documented,@Inherited,@Repeatable,@Native是Java 8.0定义的6个标准元注解,其中@Repeatable和@Native*是1.8新加的。
public enum ElementType {
TYPE, //字段
FIELD, //字段声明
METHOD, //方法声明
PARAMETER, //参数声明
CONSTRUCTOR, //构造函数声明
LOCAL_VARIABLE, //本地变量声明
ANNOTATION_TYPE, //注解类型声明
PACKAGE, //包声明
TYPE_PARAMETER, //类型参数声明
TYPE_USE; //类型使用
private ElementType() {
}
}
public enum RetentionPolicy {
SOURCE, //在源文件中
CLASS, //在class文件存在
RUNTIME; //运行时候存在
private RetentionPolicy() {
}
}
@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface InheritedAnnotation {
}
@InheritedAnnotation
public class A {
}
public class B extends A{
}
public class C extends B{
}
System.out.println(A.class.getAnnotation(InheritedAnnotation.class));
System.out.println(B.class.getAnnotation(InheritedAnnotation.class));
System.out.println(C.class.getAnnotation(InheritedAnnotation.class));
输出结果
@importJAVASE.annotation.InheritedAnnotation()
@importJAVASE.annotation.InheritedAnnotation()
@importJAVASE.annotation.InheritedAnnotation()
@Test(value=1)
@Test(value=2)
private int num;