概念:
Java提供了一种原程序中的元素,关联任何信息和任何元数据的途径和方法。
注解分类
- 按运行机制分
1、源码注解只在源码中存在
2、编译时注解在class中依然存在
3、运行行时注解 运行阶段起作用
- 按来源分
1、内置注解(JDK自带注解)
2、自定义注解
- 元注解
表示注解使用方式
内置注解
- @Override 重写
- @Deprecated 已过期
- @Suppvisewarnings 压制警告
语法要求、元注解
元注解:
1、Target-适用范围;
取值(ElementType)有:
CONSTRUCTOR:用于描述构造器
FIELD:用于描述属性
LOCAL_VARIABLE:用于描述局部变量
METHOD:用于描述方法
PACKAGE:用于描述包
PARAMETER:用于描述参数
TYPE:用于描述类、接口(包括注解类型) 或enum声明
2、Retention-类型:源码注解、编译时注解、运行时注解
RetentionPolicy.SOURCE:注解仅存在于源码中,在class字节码文件中不包含
RetentionPolicy.CLASS: 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
RetentionPolicy.RUNTIME: 注解会在class字节码文件中存在,在运行时可以通过反射获取到3、Inherited
这是一个稍微复杂的注解类型. 它指明被注解的类会自动继承. 更具体地说,如果定义注解时使用了 @Inherited 标记,然后用定义的注解来标注另一个父类, 父类又有一个子类(subclass),则父类的所有属性将被继承到它的子类中
4、Documented
Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中.- 关键字-@interface
成员要求:
成员类型须为基8类型,及String,Class,Annotation,Enumeration
若注解只有一个成员,则该成员名称须为value()
注解类也可以没有成员,即为标识注解
列子:
自定义注解:
@Traget(ElenmentType.FlElD) 表示这个注解使用范围为属性
@Retention(RetentionPolicy.RUNTIME) 表示注解在运行时起作用
注解解析
注解使用
ViewFind.bind(this); 注解解析使用
@FieldView(R.id.tv_text) 注解的使用