Annotation 注解
来源:互联网 发布:胆码预测软件 编辑:程序博客网 时间:2024/05/17 18:01
定义简单的Annotation
Annotation的定义格式:
- [public] @interface Annotation名称{
- 数据类型 变量名称();
- }
定义一个简单的Annotation
- public @interface MyDefaultAnnotationNoneParam {
- }
之后就可以直接在程序中使用”@Annotation名称”的格式。
- @MyDefaultAnnotationNoneParam
- public class AnnotationTest {
- }
此时就表示在AnnotationTest类上使用Annotation
还可以在Annotation中设置,使用变量接收参数
- public @interface MyDefaultAnnotationSingleParam {
- public String value(); //接收设置的内容
- }
在使用的时候就必需清楚地指明变量的内容
- @MyDefaultAnnotationSingleParam("陈洲")
- public class AnnotationTest {
- }
或者也可以使用明确的标记,表示内容赋给哪个参数
- @MyDefaultAnnotationSingleParam(value="陈洲")
- public class AnnotationTest {
- }
也可以同时设置多个参数
- public @interface MyDefaultAnnotationMoreParam {
- public String key();
- public String value();
- }
此Annotation在使用的时候需要设置两个参数,一个是key,另外一个是value
- @MyDefaultAnnotationMoreParam(key="name",value="陈洲")
- public class AnnotationTest {
- }
也可以使用数组当做Annotation的属性
- public @interface MyDefaultAnnotationArrayParam {
- public String[] value();
- }
接收的内容本身是一个数组类型,所以要传递数组参数
- @MyDefaultAnnotationArrayParam(value={"China","America"})
- public class AnnotationTest {
- }
以上所定义的全部Annotation有一个特点,所有的参数内容需要在使用注释时设置上去,那么也可以为一个参数设置默认的内容,在声明的时候使用default即可。
- public @interface MyDefaultAnnotationValue {
- public String key() default "name"; //指定好了默认值
- public String value() default "chenzhou"; //指定好了默认值
- }
当再去使用此Annotation时就不用设置值了
- @MyDefaultAnnotationValue
- public class AnnotationTest {
- }
没有设置内容,编译也不会出现任何错误。
在操作中,对于一个Annotation而言有时候会固定其取值范围,只能取固定的几个值,那么这个时候实际上就需要依靠枚举。
- public enum Names {
- CHENZHOU,GONGYONG,YIXIN,
- }
以后的Annotation取值,只能从这三个值中取走。
- public @interface MyDefaultAnnotationEnum {
- public MyName name() default MyName.CHENZHOU;//指定默认值
- }
此时以上的Annotation已经设置好了一个枚举中的内容作为默认值,那么外部使用此Annotation的时候也需要从枚举固定取值
- @MyDefaultAnnotationEnum(name=MyName.CHENZHOU)
- public class AnnotationTest {
- }
Retention和RetentionPolicy
在Annotation,可以使用Retention定义一个Annotation的保存范围,此Annotation的定义如下:
- @Documented
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.ANNOTATION_TYPE)
- public @interface Retention {
- RetentionPolicy value();
- }
在以上的Retention定义中存在一个RetentionPolicy类型的变量,此变量用于指定Annotation的保存范围,RetentionPolicy包含三种范围
RetentionPolicy的三种范围
No.
范围
描述
1
SOURCE
此Annotation类型的信息只会保存在程序源文件中(*.java),编译之后不会保存在编译好的类文件(*.class)之中
2
CLASS
此Annotation类型的信息会保存在程序源文件(*.java)和编译好的类文件(*.class)之中,在使用此类的时候,这些Annotation的信息将不会被加载到虚拟机JVM之中,如果一个Annotation声明时没有指定范围,则默认是此范围
3
RUNTIME
此Annotation类型的信息会保存在程序源文件(*.java)和编译好的类文件(*.class)之中,在执行时也会加载到JVM中
在三种范围中,最需要关心的就是RUNTIME范围,因为在执行的时候起作用。
使用Retention指定一个Annotation的范围,范围为RUNTIME
- @Retention(value = RetentionPolicy.RUNTIME) //表示此Annotation在运行时有效
- public @interface MyDefaultRetentionAnnotation {
- public String name() default "chenzhou";
- }
此Annotation可以在运行时起作用
内建Annotation的RetentionPolicy
- Override定义采用的是@Retention(value=SOURCE),只能在源文件中出现
- Deprecated定义采用的是@Retention(value=RUNTIME),可以在执行时出现。
- SuppressWarnings定义采用的是@Retention(value= SOURCE),只能在源文件中出现
Documented 标记
这个annotation非常简单,也非常容易理解,使用过javadoc命令的人都会很清楚,我们可以用javadoc命令将方法,类,变量等前面的注释转换成文档,在默认的情况下javadoc命令不会将我们的annotation生成再doc中去的,所以使用该标记就是告诉jdk让它也将annotation生成到doc中去,比如
- @Documented
- public @interface Retention {
- RetentionPolicy value();
- }
- 注解Annotation
- Annotation(注解)
- Annotation注解
- annotation注解
- 注解(Annotation)
- Annotation 注解
- 注解Annotation
- 注解Annotation
- Annotation(注解)
- 注解Annotation
- 注解(Annotation)
- 注解 annotation
- Annotation注解
- 注解(Annotation)
- Annotation(注解)
- 注解 annotation
- 注解 Annotation
- 注解Annotation
- Linux mint使用有感
- “Linux文件的合并、排序和分割” 之命令整合
- AMD宣布将支持开源物理引擎Bullet Physics
- Android listView 中响应Button点击事件
- 【HDOJ】1032 -> The 3n + 1 problem
- Annotation 注解
- C# 打开PPT文件另存为PPTX
- 黑马程序员————集合、泛型集合、文件管理、目录管理以及文档流
- 面试宝典
- Oracle 分页
- 十进制小数与二进制小数之间的互相转换
- 纯CSS实现各类气球泡泡对话框效果
- Ogre相关的物理引擎
- 工作一年小结