---------------------- JavaEE+Android开发、JavaEE+Android培训、期待与您交流! ----------------------
注解Annotation
Jase5.0其中有一个很重要的特性就是对注解。通过注解可以在不改变原有逻辑的情况下,在源文件中补充一些信息。
Annotation可以用来修饰类,属性,方法,而且Annotation不影响程序运行,无论是否使用Annotation代码都可以正常运行,每一个注解都是一个类。
1系统内建的Annotation
@Override 覆盖父类
@Deprecated 过时了
@SuppressWarnings 压制安全警告
注:上述三类均在java.lang包里定义的,该包在使用时自动导入,可直接使用该3个Annotation
主要是在方法覆写时使用,用于保证方法覆写的正确性,防止用户在覆写方法时将方法定义出错,
注:该Annotation只能用在方法上面,而其他元素如类,属性则不能使用。
主要功能是用来声明一个不建议使用的方法,如果在程序中使用了此方法,则在编译时出现警告信息。
注:除了可以用在方法上外,还可以用在类上面,
主要功能是用来压制警告,如在泛型中,若一个类声明时没有指明泛型,在编译的时候会警告,若使用该注释,则会压制这种警告。
压制一个警告@SuppressWarnings(“”);
压制多个警告@SuppressWarnings(“”,””);
其中关键字有:
deprecation unchecked fallthrough path serial finally all
2,自定义的Annotation
2.1Annotation的定义格式
定义Annotation
Public @interface Annotation 名称{
数据类型 变量名称(); 变量定义之后必须要有“()”
}
注:使用@interface就相当于继承了annotation接口
2.2向Annotation中设置内容
可以设置一个属性和多个属性,
若要为一个属性设置多个内容,则将该属性定义成一个数组。
设置默认值:
Public @interface Annotation 名称{
数据类型 变量名称() default 默认值;
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interfaceItcastAnnotation{
Stringcolor() default"blue";
Stringvalue();
int[] arrayAttr()default {3,4,4};
EnumTest.TrafficLamplamp() defaultEnumTest.TrafficLamp.RED;
MetaAnnotation annotationAttr()default@MetaAnnotation("lhm");
}
2.3 Retention和RetentionPolicy
Retention定义一个RetentionPolicy变量,该变量用于指定Annotation的保存范围。
RetentionPolicy的三个取值:
SOURCE 只保留在源文件中,编译之后不会保存在类文件中
CLASS 会在源文件和类文件中,但不会被加载到java虚拟机中,默认就是此范围
RUNTIME 在执行的时候也会加载到jvm中
@Override @Retention(value=RetentionPolicy.SOURCE)
@Deprecated @Retention(value=RetentionPolicy.RUNTIME)
@SuppressWarnings @Retention(value=RetentionPolicy.SOURCE)
3 通过反射取得Annotation
与Annotation操作有关的方法、
Public<A exteds Annotation>A get Annotation
如果一个元素中存在注释,则取全部注释。
Public Annotation[] getAnnotations()
返回此元素上的所有注释
Public Boolean isAnnotation()
判断元素是否是一个注释
Public Boolean isAnnotationPresent()
判断一个元素上是否存在注释
Method mainMethod =AnnotationTest.class.getMethod("main", String[].class);
ItcastAnnotation annotation2 = (ItcastAnnotation)mainMethod.getAnnotation(ItcastAnnotation.class);
System.out.println(annotation2.value());
注:只有Retention(value=RetentionPolicy.RUNTIME)才可以取到
明确的指出一个Annotation的使用位置,在Target的注释中存在一个ElementType[]枚举类型的变量,这个变量主要指定Annotation的使用限制,
ANNOTATION_TYPE 只能在注释上声明
CONSTRUCTOR 构造方法上声明
METHOD 方法上声明
PACKAGE 在包上声明
TYPE 在接口 类 枚举类型上
注:若在Target上已经明确声明过,则按要求使用,否则会编译出错。
---------------------- JavaEE+Android开发、JavaEE+Android培训、期待与您交流! ----------------------