标签:style blog http color io 使用 ar java strong
java.lang.annotation包
Annotation的基本原则:Annotation不能影响程序代码的执行,无论增加、删除Annotation,代码都始终如一的执行
元注解:负责注解其他的注解
@Documented
@Inherited
@Retention
@Target
-------------------------------------------------------------------------------
@Target
用于描述Annotatiion的范围
取值有:
java.lang.annotation.ElementType
TYPE:类,接口(包括注解),枚举
FIELD:域(包括枚举常量)
METHOD:方法
PARAMETER:参数
CONSTRUCTOR:构造方法
LOCAL_VARIABLE:局部变量
ANNOTATION_TYPE:注解类型
PACKAGE:包
例子:
@Target(ElementType.TYPE) public String className(); public @interface TargetTest { }
*******************************************************************************
@Retention
用于描述Annotation的生命周期
取值有:
java.lang.annotation.RetentionPolicy
SOURCE:源文件有效
CLASS:在Class文件中有效
RUNTIME:在运行时有效,可通过反射获取内容
例子:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface AnnonitionTargetTest { }
*******************************************************************************
@Documented
用于描述Annotation被JavaDoc
例子:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @@Documented 则 public @interface AnnonitionTargetTest { }
生成javaDoc后调用@AnnonitionTargetTest 的类、方法等会出现@AnnonitionTargetTest,如果没有@Documented 则调用@AnnonitionTargetTest 的类、方法等不会出现@AnnonitionTargetTest
*******************************************************************************
@Inherited
用于描述Annotation可以被继承
如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
注意:@Inherited annotation类型是被标注过的class的子类所继承。不从接口继承annotation,方法并不从重载的方法继承annotation
例子:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface AnnonitionTargetTest { }
*******************************************************************************
自定义注解
格式:
public @interface 注解名{定义体}
注解参数的可支持数据类型:
1.所有基本数据类型
2.String类型
3.Class类型
4.enum类型
5.Annotation类型
6.以上所有类型的数组
访问修饰符只有public 和default
如果只有一个参数成员,最好把参数名称设为"value",后加小括号
*******************************************************************************
注解处理器类:java.lang.reflect.AnnotatedElement
它的实现类:
java.lang.Class类,java.lang.reflect.Filed类,java.lang.reflect.Constructor类,java.lang.reflect.Method类,java.lang.Package类
<T extends Annotation> T getAnnotation(Class<T> annotationClass); 返回改程序元素上存在的、指定类型的注解,如果该类型注解不存在,则返回null。
Annotation[] getAnnotations();返回该程序元素上存在的所有注解。
boolean isAnnotationPresent(Class<? extends Annotation> annotationClass);判断该程序元素上是否包含指定类型的注解,存在则返回true,否则返回false.
Annotation[] getDeclaredAnnotations();返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释。(如果没有注释直接存在于此元素上,则返回长度为零的一个数组。)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。
*******************************************************************************
图片来源于网络
标签:style blog http color io 使用 ar java strong
原文地址:http://www.cnblogs.com/imeng/p/4023125.html