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/