写点什么

作为 Android Coder,你了解注解吗?

作者:子不语Any
  • 2022 年 10 月 05 日
    湖南
  • 本文字数:1410 字

    阅读完需:约 5 分钟

作为Android Coder,你了解注解吗?

前言

在日常开发中,我们经常使用注解,很多开源框架都提供了丰富的注解给开发者使用,如 ARouter@Route(path = “/test/activity”)butterknife@BindView(R.id.user) EditText name; 等等,那你有没有自定义过注解,编写过注解处理器呢?本篇就来讲讲...

文章总览

注解的概念

注解(Annotations),是元数据的一种形式,它不属于程序本身。对所注解代码的操作没有直接影响。


注解的多种用途:


  • 运行时处理:注解可以在运行时检查

  • 为编译器提供信息:编译器可以使用注解来检查错误

  • 编译或部署时处理:可生成代码、XML、文件等

注解的格式

@Anyclass MyClass { … }
复制代码


注解以 @ 开头后面跟上内容,注解允许包含元素:


@Any(id=666, value = "zby")class MyClass { … }
复制代码


若只有一个 value 元素,则可省略;若没有元素,则可省略括号:


@Any("zby")        // 只有一个 value 元素class MyClass { … }
@Any // 没有元素class MyClass { … }
复制代码


若注解有相同类型元素,则是重复注解:


@Any("Cheen")@Any("Zby")class MyClass { … }
复制代码

注解的声明

注解定义类似于接口的定义,在关键字 interface 前加 @


@interface Any {   // interface 前加 @    int id();    String value();}
复制代码

注解类型

int id()String value() 是注解类型(annotation type),可定义可选的默认值:


@interface Any {    int id();    String value() default "zby";}
复制代码


在使用注解时,若定义的注解类型没有默认值,则必须进行赋值:


@Any(id = 666) // id 必须要赋值,@Any 会提示 id 必须赋值class MyClass { … }
复制代码

元注解

标注在自定义注解上方的为元注解(meta-annotations)


@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.SOURCE)   // 这里 Target Retention 是元注解@interface Any {    int id();    String value() default “zby”;}
复制代码


java.lang.annotation 中定义了几种元注解(@Retention、@Target 是常使用的),如


@Retention 指定注解的存储方式,RetentionPolicy.java 示例如下:


public enum RetentionPolicy {    SOURCE, // 标记的注解仅保留在源码级别中,并被编译器忽略    CLASS, // 标记的注解在编译时由编译器保留,但 JVM 会忽略    RUNTIME // 标记的注解由 JVM 保留,运行时环境可以使用}
复制代码


@Target 指定注解可使用的范围, ElementType.java 示例如下:


public enum ElementType {    TYPE, // 类    FIELD, // 字段或属性    METHOD, // 方法    PACKAGE, // 包    TYPE_PARAMETER // 参数}
复制代码


对于 TYPE_PARAMETER (类型参数) ,若把 Target 设置成 @Target({ElementType.TYPE_PARAMETER}),表示可使用在泛型的类型参数上:


public class TypeParameterClass<@Any T> {    public <@Any T> T foo(T t) {        return null;    }}
复制代码


@Documented 表示使用指定的注解,将使用 Javadoc 工具记录这些元素


@Inherited 表示注解类型可以从父类继承


@Repeatable 表明标记的注解可以多次应用于同一声明或类型使用。

注解应用场景

根据 @Retention 元注解定义的存储方式,注解一般可使用在以下 3 种场景:


APT 注解处理器

APT(Annotation Processor Tools) 注解处理器,专用于处理注解。编写好的 Java 文件,需要经过 Javac 命令编译,编译为 JVM 能够加载的字节码文件,注解处理器是 Javac 自带的一个工具,用来在编译时期处理注解信息

总结

注解在开发中的应用是很常见的,本篇总结了注解相关知识,常见的应用场景。

发布于: 刚刚阅读数: 4
用户头像

子不语Any

关注

还未添加个人签名 2022.09.17 加入

还未添加个人简介

评论

发布
暂无评论
作为Android Coder,你了解注解吗?_后端_子不语Any_InfoQ写作社区