Android 编译时代码生成技术探究 一 Annotation注解

github项目代码地址

https://github.com/979451341/TestAPT

首先说一下Annotation元注解这方面的基础知识,贴出官方说明文字,大家看完再说如何去用

1.@Target:

规定Annotation所修饰的对象范围。

ElementType.CONSTRUCTOR:构造器声明

ElementType.FIELD:成员变量、对象、属性(包括enum实例)

ElementType.LOCAL_VARIABLE:局部变量声明

ElementType.METHOD:方法声明

ElementType.PACKAGE:包声明

ElementType.PARAMETER:参数声明

ElementType.TYPE:类、接口(包括注解类型)或enum声明

2.RetentionPolicy

作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)

RetentionPolicy.SOURCE:在源文件中有效

RetentionPolicy.CLASS:在class文件中有效

RetentionPolicy.RUNTIME:在运行时有效

3。默认值

注解元素必须有确定的值,要么在定义注解的默认值中指定,要么在使用注解时指定,非基本类型的注解元素的值不可为null。因此, 使用空字符串或0作为默认值是一种常用的做法。

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface FruitProvider {

public int id() default -1;

public String name() default "";

public String address() default "";

}

4.使用

首先贴出三段代码

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.CLASS)

public @interface DIActivity {

}

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

public @interface DIView {

    int value() default 0;

}

@DIActivity

public class MainActivity extends Activity {

    @DIView(R.id.tv1)

    TextView tv1;

    @DIView(R.id.tv2)

    TextView tv2;

    ……

}

DIActivity的Target是ElementType.TYPE,说注解是用于类,然后@Retention(RetentionPolicy.CLASS)说的是它的作用域是类

DIView的Target是ElementType.FIELD,说注解是用于变量、对象、属性,然后@Retention(RetentionPolicy.RUNTIME)说的是它的作用域是运行时。


参考文章

https://joyrun.github.io/2016/07/18/java-annotation/

你可能感兴趣的:(Android 编译时代码生成技术探究 一 Annotation注解)