Java Annotation

28123151-d471f82eb2bc4812b46cc5ff3e9e6b82.jpg

如上图 我们可以看出关于Annotation 的家族关系。对我称之为家族关系

1:一个Annotation 与一个RetentionPolicy(ElementType,Documented,Deprecated,Override ,Inherited,Retention,Target,SuppressWarnings )等等组成,
找熟悉:
SuppressWarnings :这个大家可以说很熟悉吧 所标注内容产生的警告,编译器会对这些警告保持静默。
Override :只能标注方法,表示该方法覆盖父类中的方法。
Deprecated:被标注的方法被废弃 ,这个我们应该也很熟悉了。
Documented :生产doc文档的时候用的 用于显示与不显示 我就是这么理解的。
Inherited:原文(它所标注的Annotation具有继承性)。
Retention :Retention只能被用来标注“Annotation类型”,而且它被用来指定Annotation的RetentionPolicy属性。
Target:Target只能被用来标注“Annotation类型”,而且它被用来指定Annotation的ElementType属性。

其实最应该介绍的就是ElementType与RetentionPolicy 这两个类。
ElementType它枚举类型 它有很多属性 ,一个Annotation至少有1-n个ElementType,所以当一个Annotation类 类型是FIELD 时 那只能是字段声明(包括枚举常量)
同理,一个Annotation至少有1-n个RetentionPolicy ,

RetentionPolicy 是Enum枚举类型,它用来指定Annotation的策略。通俗点说,就是不同RetentionPolicy类型的Annotation的作用域不同。
“每1个Annotation” 都与 “1个RetentionPolicy”关联。
a) 若Annotation的类型为 SOURCE,则意味着:Annotation仅存在于编译器处理期间,编译器处理完之后,该Annotation就没用了。
例如,“ @Override ”标志就是一个Annotation。当它修饰一个方法的时候,就意味着该方法覆盖父类的方法;并且在编译期间会进行语法检查!编译器处理完后,“@Override”就没有任何作用了。
b) 若Annotation的类型为 CLASS,则意味着:编译器将Annotation存储于类对应的.class文件中,它是Annotation的默认行为。
c) 若Annotation的类型为 RUNTIME,则意味着:编译器将Annotation存储于class文件中,并且可由JVM读入。
原文链接
:
https://www.cnblogs.com/skywang12345/p/3344137.html

你可能感兴趣的:(Java Annotation)