一、注解:
我们可以通过定义注解,使用注解来方便地调用某些数据。
二、java内建注解:
比如@override、@deprecated等,重写方法时会使用@override,而当某些类或方法已经被摒弃时则会出现 @deprecated
三、元注解:
元注解的作用就是负责注解其他注解。
包括@Target、@Inherited、@Retention、@Documented
@Target:表明Annotation的使用范围,包括类、方法、属性等
@Inherited:表明父类的注解可以被子类继承
@Retention:指定Annation的存在范围
@Documented:在生成java doc时可以写入文档说明
其中,Target范围如下:
而Retention范围如下:
四、自定义Annotation
Annotation用@interface来定义.
格式如下:
public @interface Annotation 名称{
修饰符 数据类型 变量名称();
}
也可以在定义时直接用default指定默认值。
五、解析Annotation
而想取得Annotation的值,需要使用反射机制。
解析Annotation的相关api如下所示:
示例如下:
MyAnnotation.java
import java.lang.annotation.Documented; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Inherited @Retention(value = RetentionPolicy.RUNTIME) @Documented public @interface MyAnnotation { public String name(); public String job() default "programer"; }
Person.java
@MyAnnotation(name = "lin") public class Person { }
GetAnnotationValue.java
/** 通过反射获取Annotations的值 */ public class GetAnnotationValue { public static void main(String[] args) throws Exception { Class<?> c=Class.forName("com.example.annotation.test.Person"); if(c.isAnnotationPresent(MyAnnotation.class)) { MyAnnotation annotation=c.getAnnotation(MyAnnotation.class); String name=annotation.name(); String job=annotation.job(); System.out.println("name:"+name); System.out.println("job:"+job); } } }
参考资料:《java开发实战经典》