Android 編譯時代碼生成技術(shù)探究 一 Annotation注解

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/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容