github項目代碼地址
https://github.com/979451341/TestAPT
首先說一下Annotation元注解這方面的基礎(chǔ)知識,貼出官方說明文字,大家看完再說如何去用
1.@Target:
規(guī)定Annotation所修飾的對象范圍。
ElementType.CONSTRUCTOR:構(gòu)造器聲明
ElementType.FIELD:成員變量、對象、屬性(包括enum實例)
ElementType.LOCAL_VARIABLE:局部變量聲明
ElementType.METHOD:方法聲明
ElementType.PACKAGE:包聲明
ElementType.PARAMETER:參數(shù)聲明
ElementType.TYPE:類、接口(包括注解類型)或enum聲明
2.RetentionPolicy
作用:表示需要在什么級別保存該注釋信息,用于描述注解的生命周期(即:被描述的注解在什么范圍內(nèi)有效)
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/