java annotation
来源:互联网 发布:销售数据统计分析表 编辑:程序博客网 时间:2024/06/05 14:08
Annotation用来与程序元素(类、方法、成员变量等)关联任何的信息或者任何元数据。
它从不影响java文件的运行,但是对例如编译器警告或者像文档生成器等辅助工具产生影响。
常用的annotation列表:
Annotation:名字+成员。
Annotation类型:定义了名字、类型、成员默认值。
@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
通常自己设计的annotation与源代码的出入并不是很大,所以先来了解下java.lang.annotation的源文件:
1、源文件Target.java
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Target { ElementType[] value(); }
其中的@interface是一个关键字,在设计annotations的时候必须把一个类型定义为@interface。
2、源文件Retention.java
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Retention { RetentionPolicy value(); }
比较1、2,区别并不是很大。
RetentionPolicy是个java文件,源代码:
public enum RetentionPolicy { SOURCE, CLASS, RUNTIME }
SOURCE代表的是这个Annotation类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annotation的数据就会消失,并不会保留在编译好的.class文件里面。
ClASS的意思是这个Annotation类型的信息保留在程序源码里,同时也会保留在编译好的.class文件里面,在执行的时候,并不会把这一些信息加载到虚拟机(JVM)中去。
系统默认值是CLASS. RUNTIME,表示在源码、编译好的.class文件中保留信息,在执行的时候会把这一些信息加载到JVM中去的.
源文件ElementType.java:
public enum ElementType { TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE,PACKAGE }
@Target里面的ElementType是用来指定Annotation类型可以用在哪一些元素上的.说明一下:TYPE(类型), FIELD(属性), METHOD(方法), PARAMETER(参数), CONSTRUCTOR(构造函数),LOCAL_VARIABLE(局部变量), ANNOTATION_TYPE,PACKAGE(包),其中的TYPE(类型)是指可以用在Class,Interface,Enum和Annotation类型上.
@Documented,@Documented的目的就是让这一个Annotation类型的信息能够显示在javaAPI说明文档上;
具体参考资料:http://qzzf1987.iteye.com/blog/564579
- JAVA Annotation & 自定义Annotation
- java Annotation Annotation elements
- Java Annotation
- Java Annotation
- Java Annotation
- Java Annotation
- Java Annotation
- java annotation
- Java Annotation
- Java Annotation
- Java Annotation
- Java Annotation
- JAVA [ Annotation]
- Java Annotation
- java annotation
- Java annotation
- Java Annotation
- JAVA --Annotation
- mongodb主从复制部分源码分析基础
- ArcEngine中实现Symbol的预览
- Android-- FragmentStatePagerAdapter分页
- Eclipse中SVN插件中英文互相转换方法
- Axis 之 Dynamic Proxy方式(WSDD方式) (转)
- java annotation
- 自绘菜单项
- Javascript中return false 的用法
- Qt中光标的形状
- [Hadoop源码解读](一)MapReduce篇之InputFormat
- 70 行 Python 代码编写一个递归下降解析器
- android EditText文本监听 (addTextChangedListener)
- OS X Mountain Lion 系统配置 Apache+Mysql+PHP 详细教程
- 安装QTP10,提示C++组件要安装