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 使用在方法參數上。
4)ElementType.TYPE 使用在類別、介面上。
5)ElementType.ANNOTATION_TYPE 使用在註解上。
3.@Retention 元註解,取值定義在RetentionPolicy列舉類別中。
用來定義註解生效的階段:
1)SOURCE:註解只在原始碼階段有效,不會編譯到字節碼。
2)CLASS:註解在原始碼、字節碼階段有效,運作階段不存在。
3)RUNTIME:註解在原始碼、字節碼、運行階段有效,也是最長用的。
@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();
註解的使用很簡單。
註解單獨存在沒有任何意義,必須配合其他技術。
應用:
1)註解Apt註解處理器,生產java程式碼,databinding、butterknife、dagger2 hilt
2)註解程式碼埋點
3)註解反射動態代理retrofit xUtils lifecycle
#####以上是Java元註解Retention怎麼聲明的詳細內容。更多資訊請關注PHP中文網其他相關文章!