1:刚刚新版本号的公布,抽出时间写下关于注解在android 开发中的使用
在java中注解的相关的解释:
元注解:
元注解的作用就是负责注解其它注解,Java5.0 定义了4个标准的 meta-annotation 类型,他们被用来听对其它 annotation 类型作说明,
@Tatget
说明了Annotation 所修饰的对象范围 :Annotation 可被用于 packages types ( 类 接口 枚举 Annotation 类型) 类型成员 (方法 构造方法 成员变量 枚举值 ) 方法參数 和本地变量 (循环变量 catch 參数) 在Annotation 类型的声明中使用了target 可更加明晰其修饰的目标
取值(ElementType)有:
1.CONSTRUCTOR:用于描写叙述构造器
2.FIELD:用于描写叙述域
3.LOCAL_VARIABLE:用于描写叙述局部变量
4.METHOD:用于描写叙述方法
5.PACKAGE:用于描写叙述包
6.PARAMETER:用于描写叙述參数
7.TYPE:用于描写叙述类、接口(包含注解类型) 或enum声明
@RetentionPoicy
定义改Annoation 被保留的时间长短,某些Annotation 仅出如今源码中,而被编译器丢弃,而还有一些却被编译在class 文件里。编译在class文件里的Annotation 可能会被nijihulue
1.SOURCE:在源文件里有效(即源文件保留)
2.CLASS:在class文件里有效(即class保留)
3.RUNTIME:在执行时有效(即执行时保留)
Retention meta-annotation类型有唯一的value作为成员。它的取值来自java.lang.annotation.RetentionPolicy的枚举类型值
@Documented:
@Documented用于描写叙述其他类型的annotation应该被作为被标注的程序成员的公共API。因此能够被比如javadoc此类的工具文档化。Documented是一个标记注解。没有成员。
@Inherited:
@Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。假设一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
注意:@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。
当@Inherited annotation类型标注的annotation的Retention是RetentionPolicy.RUNTIME,则反射API增强了这样的继承性。假设我们使用java.lang.reflect去查询一个@Inherited annotation类型的annotation时,反射代码检查将展开工作:检查class和其父类,直到发现指定的annotation类型被发现,或者到达类继承结构的顶层
自己定义注解:
使用@interface自己定义注解时,自己主动继承了java.lang.annotation.Annotation接口,由编译程序自己主动完毕其它细节。
在定义注解时。不能继承其它的注解或接口。@interface用来声明一个注解。当中的每个方法实际上是声明了一个配置參数。
方法的名称就是參数的名称,返回值类型就是參数的类型(返回值类型仅仅能是基本类型、Class、String、enum)。能够通过default来声明參数的默认值。
定义注解格式:
public @interface 注解名 {定义体}
注解參数的可支持数据类型:
1.全部基本数据类型(int,float,boolean,byte,double,char,long,short)
2.String类型
3.Class类型
4.enum类型
5.Annotation类型
6.以上全部类型的数组
Annotation类型里面的參数该怎么设定:
第一,仅仅能用public或默认(default)这两个訪问权修饰.比如,String value();这里把方法设为defaul默认类型;
第二,參数成员仅仅能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和 String,Enum,Class,annotations等数据类型,以及这一些类型的数组.比如,String value();这里的參数成员就为String;
第三,假设仅仅有一个參数成员,最好把參数名称设为"value",后加小括号.例:以下的样例FruitName注解就仅仅有一个參数成员。