【Java】元注解
1. 元注解的基本介紹
2. 元注解的分類
2.1 @Retention 注解
2.2 @Target 注解
2.3 @Documented 注解
2.4 @Inherited 注解
1. 元注解的基本介紹
2. 元注解的分類
2.1 @Retention 注解
2.2 @Target 注解
2.3 @Documented 注解
2.4 @Inherited 注解
1. 元注解的基本介紹
JDK 的元 Annotation 用于修飾其他 Annotation
元注解: 本身作用不大,看源碼時,可以知道是干什么用的
2. 元注解的分類
Retention 指定注解的作用范圍,三種 SOURCE,CLASS,RUNTIME
Target 指定注解可以在哪些地方使用
Documented 指定該注解是否會在 javadoc 體現
Inherited 子類會繼承父類注解
2.1 @Retention 注解
只能用于修飾一個 Annotation 定義, 用于指定該 Annotation 可以保留多長時間,@Rentention 包含一個 RetentionPolicy類型的成員變量,使用 @Rentention 時必須為該 value 成員變量指定值
@Retention 的三種值
RetentionPolicy.SOURCE: 編譯器使用后,直接丟棄這種策略的注釋
RetentionPolicy.CLASS: 編譯器將把注解記錄在 class 文件中. 當運行 Java 程序時, JVM 不會保留注解。 這也是默認值。
RetentionPolicy.RUNTIME:編譯器將把注解記錄在 class 文件中. 當運行 Java 程序時, JVM 會保留注解,程序可以通過反射獲取該注解
三種值注入的時間如下:
演示案例:Override 注解源碼
@Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) //這個就是 RetentionPolicy.SOURCE 的取值 public @interface Override { }
說明:Override的作用域在SOURCE,當編譯器編譯時生效,不會寫入到.class文件,也不會再runtime(運行時)生效
Override 只在編譯器層面生效,或在源碼的時候生效,過了就不生效了
2.2 @Target 注解
用于修飾Annotation定義,用于指定被修飾的Annotation 能用于修飾哪些程序元素
@Target 也包含一個名為value的成員變量。
@Target源碼說明:
@Documented @Retention(RetentionPolicy.RUNTIME) //它的作用是:RUNTIME @Target(ElementType.ANNOTATION_TYPE) //這里的 ANNOTATION_TYPE 說明 @Target 只能修飾注解 public @interface Target { //說明它是注解 /** * Returns an array of the kinds of elements an annotation type * can be applied to. * @return an array of the kinds of elements an annotation type * can be applied to */ ElementType[] value(); // 可以簡單看下 ElementType 的取值 }
演示案例:@Deprecated源碼
可以看到 @Deprecated 注解 Target 上的注解范圍有:構造器、字段、局部變量、方法、包、參數、類型。
2.3 @Documented 注解
@Documented:用于指定被該元 Annotation修飾的Annotation類將被javadoc工具提取成文檔,即在生成文檔時,可以看到該注解。
說明:定義為Documented的注解必須設置Retention值為RUNTIME。
案例演示:@Deprecated注解源碼如下
可以看到文檔上的 @Deprecated 注解被保留了,就是因為 @Deprecated 注解上有 @Documented,在 javadoc 的時候就會保留 @Deprecated 這個注解
@Documented 源碼如下
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Documented { }
2.4 @Inherited 注解
被它修飾的 Annotation 將具有繼承性,如果某個類使用了被@Inherited修飾的Annotation,則其子類將自動具有該注解
說明:實際應用中,使用較少,了解即可。
元注解:本身作用不大,看源碼時,可以知道是干什么的就行了
Java
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。