作为 Android Coder,你了解注解吗?
前言
在日常开发中,我们经常使用注解,很多开源框架都提供了丰富的注解给开发者使用,如 ARouter
的 @Route(path = “/test/activity”)
、butterknife
的 @BindView(R.id.user) EditText name;
等等,那你有没有自定义过注解,编写过注解处理器呢?本篇就来讲讲...
文章总览
注解的概念
注解(Annotations),是元数据的一种形式,它不属于程序本身。对所注解代码的操作没有直接影响。
注解的多种用途:
运行时处理:注解可以在运行时检查
为编译器提供信息:编译器可以使用注解来检查错误
编译或部署时处理:可生成代码、XML、文件等
注解的格式
注解以 @
开头后面跟上内容,注解允许包含元素:
若只有一个 value
元素,则可省略;若没有元素,则可省略括号:
若注解有相同类型元素,则是重复注解:
注解的声明
注解定义类似于接口的定义,在关键字 interface
前加 @
:
注解类型
int id()
和 String value()
是注解类型(annotation type),可定义可选的默认值:
在使用注解时,若定义的注解类型没有默认值,则必须进行赋值:
元注解
标注在自定义注解上方的为元注解(meta-annotations)
在 java.lang.annotation
中定义了几种元注解(@Retention、@Target 是常使用的),如
@Retention 指定注解的存储方式,RetentionPolicy.java
示例如下:
@Target 指定注解可使用的范围, ElementType.java
示例如下:
对于 TYPE_PARAMETER
(类型参数) ,若把 Target
设置成 @Target({ElementType.TYPE_PARAMETER})
,表示可使用在泛型的类型参数上:
@Documented 表示使用指定的注解,将使用 Javadoc 工具记录这些元素
@Inherited 表示注解类型可以从父类继承
@Repeatable 表明标记的注解可以多次应用于同一声明或类型使用。
注解应用场景
根据 @Retention
元注解定义的存储方式,注解一般可使用在以下 3 种场景:
APT 注解处理器
APT(Annotation Processor Tools) 注解处理器,专用于处理注解。编写好的 Java 文件,需要经过 Javac 命令编译,编译为 JVM 能够加载的字节码文件,注解处理器是 Javac 自带的一个工具,用来在编译时期处理注解信息
总结
注解在开发中的应用是很常见的,本篇总结了注解相关知识,常见的应用场景。
版权声明: 本文为 InfoQ 作者【子不语Any】的原创文章。
原文链接:【http://xie.infoq.cn/article/b4d99c85fec9b824fd7073570】。文章转载请联系作者。
评论