java 注解
定义:
又称为元数据,是一种代码级别的声明。
- 编写文档: 通过元数据生成 doc
利用它生成API文档 - 代码分析: 通过元数据对代码进行分析
在一些框架中我们通过解释注解来生成代码,参数,甚至生成文件 - 编译检查: 使得编译器做基本的编译检查
内置系统注解
@Override (标记注解)
级别: METHOD
指定该方法是覆写 父类 的方法
@Deprecated (标记注解)
级别: METHOD
指定该方法是过时的,不提倡使用- @SuppressWarnings
作用范围– 不定
抑制编译器编译时警告信息
常用的有
deprecation,使用了过时的类或方法时的警告
unchecked,执行了未检查的转换时的警告
fallthrough,当 Switch 程序块直接通往下一种情况而没有 Break 时的警告
path,在类路径、源文件路径等中有不存在的路径时的警告
serial,当在可序列化的类上缺少serialVersionUID 定义时的警告
finally ,任何 finally 子句不能正常完成时的警告
all,关于以上所有情况的警告 元注解:
作用范围:ANNOTATION ,注解的注解
@Target
作用:用于描述注解的使用范围
1.PACKAGE:用于描述包
2.TYPE:用于描述类、接口(包括注解类型) 或enum声明
3.CONSTRUCTOR:用于描述构造器
4.FIELD:用于描述域
5.METHOD:用于描述方法
6.PARAMETER:用于描述参数
7.LOCAL_VARIABLE:用于描述局部变量
8.ANNOTATION_TYPE 应用于其他注解的元注解@Retention
可以设置为RetentionPolicy类型的值
RetentionPolicy.CLASS
annotation信息将被编译器编译时保存在class文件中,但执行时不会在VM装载。
RetentionPolicy.RUNTIME
annotation信息将被编译器编译时保存在class文件中,执行时也会被VM装载
RetentionPolicy.SOURCE
annotation信息将被编译器编译时舍弃掉。
@Documented
用于描述其它类型的annotation应该被作为被标注的程序成员的公共API
@Inherited
@Inherited阐述了某个被标注的类型是被继承的
自定义注解
@interface 声明
根据注解内部属性多少可以分为标记注解 单值注解 多值注解
1 无参注解(标记注解)
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface LayoutViewInject { }
2 单参注解(单值注解)
参数最好定义为 value
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface LayoutViewInject { int value(); // int[] value(); }
3 多参注解(多值注解)
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface LayoutViewInject { int value(); int value1(); }
要想使用注解在运行期间对代码进行分析
RetentionPolicy.RUNTIME
注解框架
Xutils afinal
butterknife AndroidAnnotation
1 继承 AbstractProcessor 2 重写 process 方法 3 启用 自定义的 apt apt "org.androidannotations:androidannotations:$AAVersion"