Java元注解Retention代碼示例介紹
1.注解聲明:通過@interface就可以聲明一個注解。
@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface BindView { int value(); }
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Get { String value() default ""; }
@Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface Queue { String value() ; }
2. @Target 元注解,注解的注解,它的取值定義在ElementType枚舉類中。
@Target注解 用來定義我們自定義注解代碼的什么位置。
@Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.ANNOTATION_TYPE}) public @interface Target { ElementType[] value(); }
1)ElementType.FIELD 使用在成員變量上。
2)ElementType.METHOD 使用在成員方法上。
3)ElementType.PARAMETER 使用在方法參數(shù)上。
4)ElementType.TYPE 使用在類、接口上。
5)ElementType.ANNOTATION_TYPE 使用在注解上。
3.@Retention 元注解,取值定義在RetentionPolicy枚舉類中。
用來定義注解生效的階段:
1)SOURCE:注解只在源碼階段有效,不會編譯到字節(jié)碼中。
2)CLASS:注解在源碼、字節(jié)碼階段有效,運(yùn)行階段不存在。
3)RUNTIME:注解在源碼、字節(jié)碼、運(yùn)行階段有效,也是最長用的。
@Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.ANNOTATION_TYPE}) public @interface Retention { RetentionPolicy value(); }
public enum RetentionPolicy { SOURCE, CLASS, RUNTIME; private RetentionPolicy() { } }
2.注解的使用
@BindView(R.id.start_activity) TextView startTextView;
@Get("http://www.baidu.com") Call getPerson(@Queue("name") String name,@Queue("200")int price); @Get("http://www.baidu.com") Call getPerson();
注解的使用很簡單。
注解單獨(dú)存在沒有任何意義,必須配合其他技術(shù)。
應(yīng)用:
1)注解+Apt注解處理器,生產(chǎn)java代碼 ,databinding、butterknife、dagger2 hilt
2)注解+代碼埋點(diǎn)
3)注解+反射+動態(tài)代理 retrofit xUtils lifecycle
以上應(yīng)用會在后面的文章繼續(xù)分享。如果通過反射來獲取注解上的值,Retrofit框架原理。
到此這篇關(guān)于Java元注解Retention代碼示例介紹的文章就介紹到這了,更多相關(guān)Java Retention內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)與算法之棧(Stack)實(shí)現(xiàn)詳解
這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記第二篇,Java數(shù)據(jù)結(jié)構(gòu)與算法之棧Stack實(shí)現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09Java用戶交互scanner及運(yùn)算結(jié)構(gòu)代碼詳解
這篇文章主要介紹了Java用戶交互scanner及運(yùn)算結(jié)構(gòu)代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12Java concurrency線程池之Callable和Future_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency線程池之Callable和Future,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06Mybatis模糊查詢及自動映射實(shí)現(xiàn)詳解
這篇文章主要介紹了Mybatis模糊查詢及自動映射實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02