1、定义简单的Annotation
Annotation的定义格式:
[public] @interface Annotation名称{
数据类型 变量名称();
}
举例子:----接受一个值
public @interface mySingleParamAnnotation{
public String value();//接受设置内容---注意属性后面有括号;
}
注意:以上必须放到mySingleParamAnnotation.java文件中,
跟公开的Class一样,文件名与类名必须统一;
@mySingleParamAnnotation(value="lid")
public class Demo{
public static void main(String args[]){
}
}
举例子:-----接受多个值
public @interface myMoreParamAnnotation{
public String key();
public String value();//接受设置内容---注意属性后面有括号;
}
@myMoreParamAnnotation(key="yuj",value="lid")
public class Demo{
public static void main(String args[]){
}
举例子:-----设置一个数组
public @interface myArrayParamAnnotation{
public String[] value();//接受设置内容---注意属性后面有括号;
}
@myArrayParamAnnotation(value={"lid","yuj"})
public class Demo{
public static void main(String args[]){
}
以上定义的Annotation中有一个特点,所有的参数内容需要在使用注释的时候设置上去,
那么也可以为一个参数设置默认的内容,在声明的时候使用default即可;
举例子-----设置默认值
public @interface myDefaultAnnotationValue{
public String key() default "lid";//指定好了默认值
public String value() default "yuj";//指定好了默认值
}
下面的应用就不用设置值了
@myDefaultAnnotationValue
public class Demo{
public static void main(String args[]){
}
但是在操作中,对于一个Annotation而言有时候固定其取值范围,只能取固定
的几个值,那么这时候也需要从枚举固定取值;
public enum MyName{//定义枚举类型
LID,YUJ;
}
public @interface myDefaultAnnotationEnum{
public MyName name() default MyName.LID;//指定默认值
}
此时以上的Annotation已经设置好了一个枚举中的内容作为默认值,那么外部
使用此Annotation的时候也需要从枚举固定取值
@myDefaultAnnotationEnum(name=MyName.LID)//从固定的枚举中取值
public class Demo{
public static void main(String args[]){
}
}
Retention和RetentionPolicy:
可以使用Retention定义一个Annotation的保存范围,此Annotation的定义如下:
@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE);
public @interface Retention{
RetentionPolicy value();
}
在以上的Retetion定义中存在一个RententionPolicy的变量,
此变量用于指定Annotation的保存范围,RetentionPolicy包含三种范围;
SOURCE:此Annotation类型的信息只会保留在程序源文件之中,编译之后不会保存在编译好的
类文件(.class)之中;
CLASS:此Annotation类型将保留在程序源文件(.java)和编译后的(.class)文件之中,在使用此类
的时候,这些Annotation信息将不会被加载到虚拟机(JVM)中,如果一个Annotation声明时
没指定范围,则默认为此范围;
RUNTIME:此Annotation类型的信息保留在源文件(.java)、类文件(.class)在执行时也会加载到JVM之中;
在三个范围中RUNTIME最值得关注,他是在执行时起作用;
使用Rentention指定一个Annotation的范围,范围为RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(value=RetentionPolicy.RUNTIME)//表示此annotation在运行时起作用;
public @interface myDefaultRetentionAnnotation{
public String name() default "LID";
}
此Annontation可以运行时起作用,而且在以后要讲解反射与Annotation的操作中,也必须使用此范围;
内建Annotation的RetentionPolicy:
Override定义采用的是@Retention(value=SOURCE),只能在原文件中出现;
Deprecated定义采用的是@Retention(value=RUNTIME),可以再执行时出现;
SuppressWarnings定义采用的是@Retention(value=SOURCE),只能在源文件中出现;
本文详细介绍了Java Annotation的基本概念、定义方式、参数设置、默认值、枚举取值、保存范围等核心内容,并通过实例展示了如何在类中使用Annotation。重点强调了Retention和RetentionPolicy的作用,以及内建Annotation的特性。
2114

被折叠的 条评论
为什么被折叠?



